[英]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.