【发布时间】:2012-10-12 01:23:14
【问题描述】:
我正在使用应该跨浏览器兼容的纯 html 和 javascript 制作可移植文档。我将搜索/荧光笔框和结果页面放在单独的框架中。它在 ie、ff 和 chrome(使用 disable-web-security 参数)中一切正常,但在 Opera 中抛出错误。我不知道为什么会这样以及如何解决这个问题。
感谢任何帮助。
Opera 抛出异常的函数:
function selectElementContents(el) {
if (window.getSelection && document.createRange) {
var sel = window.getSelection();
var range = document.createRange();
range.selectNodeContents(el);
sel.removeAllRanges();
sel.addRange(range);
} else if (document.selection && document.body.createTextRange) {
var textRange = document.body.createTextRange();
textRange.moveToElementText(el);
textRange.select();
}
}
Opera 的错误控制台:
Uncaught exception: DOMException: WRONG_DOCUMENT_ERR
Error thrown at line 56, column 8 in selectElementContents(el) in xy.js:
range.selectNodeContents(el);
【问题讨论】:
-
您违反了跨域策略。但是没有代码很难说在哪里。如果可以,请添加 jsfiddle。
-
我会尝试添加一个 jsfiddle... 在完成之前,有没有办法在 Opera 中禁用此安全选项?有一个带有参数的 chrome ......
-
我不能做 jsfiddle,因为它有框架......也许如果荧光笔功能不是帧间功能,它会起作用。从左侧框架调用脚本,并在容器框架中突出显示单词。
-
好的,我理解这个想法。看看这个解决方案:jsfiddle.net/zLtXu - 如果你很聪明并且不像我 atm 那样累,你就会明白它是如何工作的。如果没有,请发表评论,我明天会给你进一步的解释。 (是的,那个小提琴中有 horrible 代码,它不是跨浏览器等等。只是一个概念证明。)问题是因为你使用一个窗口来获取选择,而另一个窗口来获取从中获取元素,当它们不匹配时 - Opera 抛出异常。
-
谢谢!我想我明白你的意思了。但是这是怎么回事,我用 Firefox 查看它并得到了警告框,但在 Opera 中它只是选择“这将被选中。”如果我能让我的荧光笔使用仅在歌剧。
标签: javascript dom opera