3

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

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

现在,当我在页面加载后执行此功能时,它可以完美运行,因此:

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

如果我从我的网络服务器打开像 google、yahoo 或什至网页这样的 URL,它也可以工作。

但是,当我将它附加到 onclick 事件(例如 HTML 按钮上)时,它会失败。

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

具体是什么失败?好吧,页面确实打开了,但它是空白的。document.write 不工作。捕获记录了以下错误:

错误:ReferenceError:安全错误:试图读取受保护的变量:写入

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

非常感谢您的帮助!

4

2 回答 2

4

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

如果您再次看到此问题,请告诉我,最好让我查看完整代码。我很想在每个化身中都解决这个错误..

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

于 2011-10-03T13:10:12.200 回答
1

我结束了清除 Opera 浏览器中的所有私人数据并且它起作用了。但是,每次加载页面时,我都会确保按 shift 或 ctrl refresh 来清除缓存。要么是缓存问题,要么完全是其他问题。

于 2011-09-28T19:09:25.810 回答