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

时间:2011-09-28 17:39:31

标签: javascript opera 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不起作用。渔获物注意到错误:

  

错误:ReferenceError:安全错误:尝试读取受保护的变量:write

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

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:4)

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

如果您再次发现此问题,请告知我们,最好让我看一下完整的代码。我喜欢在每个化身中指出这个错误。

BTW,请记住,用户JS,扩展,甚至是从插件触发的JS也可能会使用document.domain,因此请尝试禁用任何可能会干扰的内容。

答案 1 :(得分:1)

我在Opera浏览器中清除了所有私人数据,但它确实有效。但是,每次加载页面时,我都确保按shift或ctrl刷新清除缓存。无论是缓存问题还是其他问题。