我不得不调试一个在 IE8 中失败的基于所见即所得 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
}
}
基本上发生的情况是,如果您选择一些文本并单击insert image它首先运行的按钮,则此isAllowed函数可以查看您选择的文本是否可编辑(即在 ContentEditable 的 iframe 内)。
这似乎在 IE8document.selection
或createRange()
.
问题是,当您不使用鼠标选择任何文本并单击可编辑区域中的某个位置时,sel.createRange().parentElement()
似乎会返回 iframe 之外的元素,因此它不是 ContentEditable 并且函数返回false。
我想知道是否有人可以深入了解 IE8 的选择和范围的实现发生了什么变化,这些变化会导致这种行为?