1

我在 Internet Explorer 8 中有以下代码:

if (window.opener != null && window.opener.foo != null)  window.opener.foo = bar;

有时,window.opener是设定的。但是,如果用户打开一个弹出窗口然后离开,则应避免在其上设置属性的尝试。

在 Firefox 和 Chrome 中,这是可行的,因为window.opener一旦用户退出或刷新该窗口,它就会变为 null。然而,在 IE 中,window.opener它不是 null,window.opener.foo而是给出“Permission Denied”而不是 null。因此,window.opener.foo != null评估为真。

如何解决这个问题,什么值与 Internet Explorer 中的“Permission Denied”匹配?

4

2 回答 2

1

这是我在 IE8 中使用的检查:

if (window.opener && !window.opener.closed) {
    // do what you will with window.opener
}

编辑:如果你想显示一个友好的错误,你可以尝试这样的事情:

try {
    if (window.opener && window.opener.foo != null) {
        window.opener.foo = bar;
    }
} catch (e) {
    if (e.description.toLowerCase().indexOf('permission denied') !== -1) {
        // handle it nicely
    } else {
        // some other problem, let it blow up
        throw e;
    }
}

这使您可以专门处理“拒绝访问”错误,而不会隐藏任何其他潜在错误。

于 2012-10-25T17:28:40.863 回答
0

如果您在 IE 中无权访问 window.opener 的属性,则将其传递给 Object.keys() 将返回一个长度为 0 的字符串。

示例用法:

if (window.opener && Object.keys(window.opener).length) {
  // do what you will with window.opener
}
于 2016-06-14T09:36:08.277 回答