我在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”相匹配?
答案 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
}