2

如何检查我是否可以访问 window.opener?

如果我从未与我的页面 ( ) 连接的文件在新窗口中打开我的页面,我会收到错误消息access denied

代码:

if (window.opener) {
        if (window.opener.document.getElementById('myHidden') !== "undefined") {
            if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {

在第2行中发生错误。但只有当我从随机页面打开页面时(当然没有名为“myHidden”的输入字段)。如果我从具有此类元素的“有效”页面打开页面,则它正在工作。

4

2 回答 2

3

您正在将元素实例与string "undefined"进行比较,而不是检查是否window.opener.document存在(我不知道您是否必须这样做,但很容易添加)。你可能的意思是:

// Note: Still not right, see below
if (typeof window.opener.document.getElementById('myHidden') !== "undefined")

...除了那仍然不正确,因为在没有匹配元素时getElementById返回null(not )。undefined

这是我的做法:

var input = window.opener &&
            window.opener.document &&
            window.opener.document.getElementById('myHidden');
var value = input && input.value;
if (value != "1") {
    // Do something
}

这使用了奇怪强大的运算符(与奇怪强大的运算&&符的近亲)。如果or是“错误的”(or or or or or or,当然,--最后四个不适用),第一个分配将短路,导致. 如果是假的,第二个赋值将短路,导致为。!= ,所以...||window.openerwindow.opener.documentnullundefined0""NaNfalseinputundefinedinputvalueundefinedundefined"1"

于 2012-03-27T14:25:50.570 回答
1

检查您是否有权访问 window.opener.document:

if (window.opener && window.opener.document) {
        if (window.opener.document.getElementById('myHidden') !== "undefined") {
                if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {
                }
        }
}

如果你想确定添加检查window.opener.document.getElementById 例如

if (window.opener && window.opener.document && window.opener.document.getElementById) {
        if (window.opener.document.getElementById('myHidden') !== "undefined") {
                if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {
                }
        }
}
于 2012-03-27T14:25:10.253 回答