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

How can I check If I have access to window.opener?

本文关键字:访问 opener window 是否 检查 何检查      更新时间:2023-09-26

如何检查我是否有权访问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"的输入字段)。如果我从一个包含这样一个元素的"有效"页面打开该页面,它就可以工作了。

您将元素实例与字符串"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
}

它使用了异常强大的&&运算符(与异常强大的||运算符的近亲)。如果window.openerwindow.opener.document为"假"(nullundefined0""NaN,当然还有false——最后四个不适用),则第一个赋值将短路,导致inputundefined。如果input为假,则第二个赋值将短路,导致valueundefinedundefined!="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") {
                }
        }
}