Изменения в выборе и функциональности диапазона в IE8 - PullRequest
1 голос
/ 09 июля 2010

Мне нужно отладить WYSIWYG-редактор HTML на основе JavaScript, который не работает в IE8. Он предназначен только для использования в 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
        }
}

По сути, происходит то, что если вы выделите какой-нибудь текст и нажмете, скажем, кнопку insert image , он сначала запустит эту функцию isAllowed , чтобы увидеть, является ли выбранный вами текст редактируемым (т.е. в пределах iframe, который является ContentEditable).
Похоже, что в IE8 происходит сбой на уровне document.selection или createRange().

Проблема в том, что когда вы не выделяете текст мышью и не щелкаете где-нибудь в редактируемой области, sel.createRange().parentElement(), кажется, возвращает элемент за пределами iframe, и поэтому он не ContentEditable, а функция возвращает ложь .

Интересно, кто-нибудь мог бы пролить свет на то, что изменилось в реализации IE8 выбора и диапазонов, которые могли бы вызвать такое поведение?

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Хорошо, ответ был довольно прост!Должно быть изменение в том, как IE8 сохраняет фокус на iframe, добавив foo.focus ();к приведенному ниже коду, все работает как положено.Надеюсь, это кому-то поможет, но, вероятно, не поможет, если их код был написан правильно:)

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;
        }
}
0 голосов
/ 09 июля 2010

Рассматривали ли вы использование отладчика или размещение оповещений в JavaScript, чтобы вы могли выяснить, что происходит.Выясните, какой элемент возвращается, и, возможно, вы найдете свою проблему.Возможно, что он возвращает некоторый родительский элемент вместо iframe (я только догадываюсь здесь).Кроме того, я не уверен, почему это будет работать, если они только щелкнули в этой области.Может быть, я что-то недопонимаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...