【问题标题】:Opera throws DOMException from selectNodeContentsOpera 从 selectNodeContents 抛出 DOMException
【发布时间】: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


【解决方案1】:

您需要在文档中创建要使用它的范围。我认为您已经根据 jsfiddle 演示解决了这个问题,但是例如该行

var range = document.createRange();

应该是

 var range = el.ownerDocument.createRange();

【讨论】:

    猜你喜欢
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多