Мне нужно отладить 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 выбора и диапазонов, которые могли бы вызвать такое поведение?