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

时间:2012-03-27 14:22:27

标签: javascript window.opener

如何检查我是否可以访问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”的输入字段)。 如果我从具有这种元素的“有效”页面打开页面,它就可以正常工作。

2 个答案:

答案 0 :(得分:3)

您正在将元素实例与字符串 "undefined"进行比较,并且您没有检查window.opener.document是否存在(我不知道您是否必须或不,但它很容易添加)。你可能意味着:

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

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

我是这样做的:

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

它使用了奇怪强大的&&运算符(近亲the curiously-powerful || operator)。如果window.openerwindow.opener.document为“falsey”(nullundefined0""或{{NaN,则第一项任务将会短路1}}或者,当然,false - 而后四个不适用),导致inputundefined。如果input为假,则第二个分配将短路,导致valueundefinedundefined!= "1",所以......

答案 1 :(得分: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 e.g。

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") {
                }
        }
}