[英]Changes to selection and range functionality in IE8
我必須調試IE8中失敗的基於WYSIWYG javascript的HTML編輯器。 它僅設計用於IE,因此應簡化解決方案。 這是失敗的現有代碼:
function isAllowed() {
var sel
var obj
sel = foo.document.selection
if (sel.type != "Control")
{
obj = sel.createRange().parentElement()
} else {
obj = sel.createRange()(0)
}
if (obj.isContentEditable) {
foo.focus()
return true
} else {
return false
}
}
本質上發生的是,如果您選擇一些文本並單擊說“ 插入圖像”按鈕,它將首先運行isAllowed函數,以查看您選擇的文本是否可編輯(即在ContentEditable的iframe中)。
這似乎在IE8中的document.selection
或createRange()
處被破壞了。
問題是,當您沒有用鼠標選擇任何文本並單擊可編輯區域中的某個位置時, sel.createRange().parentElement()
似乎返回了iframe之外的元素,因此它不是ContentEditable,並且函數返回錯誤的 。
我想知道是否有人能對IE8的選擇和范圍實現中的哪些變化引起此現象有任何見解?
好的,答案很簡單! 必須通過添加foo.focus()改變IE8保持對iframe的關注。 到下面的代碼,一切正常。 希望這對某人有幫助,但是如果他們的代碼一開始就正確編寫的話,可能就不會有用:)
function isAllowed() {
var sel;
var obj;
foo.focus();
sel = foo.document.selection;
if (sel.type != "Control")
{
var rng = sel.createRange();
obj = rng.parentElement();
} else {
obj = sel.createRange()(0);
}
if (obj.isContentEditable) {
foo.focus();
return true;
} else {
return false;
}
}
您是否考慮過使用調試器或將警報放入javscript中,以便了解發生了什么情況。 找出要返回的元素,也許您會發現問題。 有可能返回一些父元素而不是iframe(我只是在這里猜測)。 另外,我不確定如果他們只單擊該區域,為什么它將繼續運行。 也許我誤會了一些東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.