Internet Explorer - 检查权限是否被拒绝

时间:2012-10-25 17:24:07

标签: javascript internet-explorer

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

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

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

在Firefox和Chrome中,这是有效的,因为一旦用户退出或刷新该窗口,window.opener就会变为空。但是,在IE中,window.opener不为空,window.opener.foo给出“权限被拒绝”而不是空。因此,window.opener.foo != null的计算结果为真。

如何解决此问题,哪个值与Internet Explorer中的“Permission Denied”相匹配?

2 个答案:

答案 0 :(得分: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;
    }
}

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

答案 1 :(得分:0)

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

使用示例:

if (window.opener && Object.keys(window.opener).length) {
  // do what you will with window.opener
}