簡體   English   中英

更改IE8中的選擇和范圍功能

[英]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.selectioncreateRange()處被破壞了。

問題是,當您沒有用鼠標選擇任何文本並單擊可編輯區域中的某個位置時, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM