编程语言
首页 > 编程语言> > javascript – “错误:ReferenceError:安全错误:尝试读取受保护的变量:写入”使用Opera 11.5和window.open以及document.write

javascript – “错误:ReferenceError:安全错误:尝试读取受保护的变量:写入”使用Opera 11.5和window.open以及document.write

作者:互联网

我遇到了window.open的问题,只出现在Opera(版本11.5)中.

function openpageopera()
{
  var w = window.open("","_blank");
  try
  {
    w.document.write("<p>hello</p>world");
    w.document.close();
  }
  catch(err)
  {
    alert("error:" + err);
  }
}

现在,当我在页面加载后执行此函数时,它完美无缺地工作,ergo:

$(document).ready(function() {
  openpageopera();
});

如果我打开谷歌,雅虎甚至是我的网络服务器的网页,它也有效.

但是,当我将它附加到onclick事件时,就像在HTML按钮上一样,它会失败.

<input type="button" value="Fails" onclick="openpageopera();">

具体失败了什么?好吧,页面确实打开了,但它是空白的. document.write不起作用.捕获注意到错误:

error:ReferenceError: Security error: attempted to read protected variable: write

我不明白为什么在html按钮上执行此操作会引发安全性错误.为什么会发生这种情况,我该如何解决?

非常感谢您的帮助!

解决方法:

如果在某处设置了document.domain的代码,它可能会更改父页面的安全上下文. (如果将document.domain设置为其当前值,也会发生这种情况.)当您打开“”或about:blank时,它应该继承父级的安全上下文,document.write()应该可以工作 – 但我知道Opera有一些错误设置document.domain在使用空弹出窗口时会导致问题的过去.我相信这些错误在11.50修复,但似乎你遇到了类似的问题.如果可以,请避免设置document.domain ..

如果您再次看到此问题,请告诉我,最好让我看看完整的代码.我喜欢在每个化身中指出这个错误.

顺便说一句,请记住,用户JS,扩展,甚至从插件触发的JS也可能会混乱使用document.domain,因此请尝试禁用任何可能会干扰的内容.

标签:document-write,javascript,opera,window-open
来源: https://codeday.me/bug/20190902/1794264.html