Chrome javascript错误无法读取属性'开启器'为null

Chrome javascript error cannot read property 'opener' of null

本文关键字:null javascript 错误 读取 属性 Chrome      更新时间:2023-09-26

我有一点javascript,我用它来确定"开启器"窗口在哪里(通常是为了确定用户正在使用哪个监视器,并在他们正在使用的监视器上打开弹出窗口。

if (typeof (window.opener) != "undefined")
{
    var x_win = window.self;
    while (x_win != "undefined")
    {
        x_win = x_win.opener;
        if (typeof (x_win.opener) == "undefined") //chrome falls over here
        {
            winX = (document.all) ? x_win.screenLeft : x_win.screenX;
            break;
         }
     }
}

上面的内容在IE中运行得很好,但Chrome在代码中用"Chrome falls over here"标记的那一行掉了下来。它报告:未捕获类型错误:无法读取null的属性"opener"。

我正在测试"未定义"——我需要做什么才能在Chrome中工作?

您缺少一个typeof:

while (typeof x_win != "undefined")
// ----^

不过,另外,我会对x_win进行真实性检查,而不是对typeof进行检查,因为如果不设置,我希望openernull而不是undefined

while (x_win)

请注意,如果目标是找到链中没有opener的最后一个窗口,则可以将其缩短

var x_win = window;
while (x_win.opener) {
    x_win = x_win.opener;
}
winX = document.all ? x_win.screenLeft : x_win.screenX; 

这里有一个细微的区别,即使当前窗口没有opener,我们也会得到winX,而在您的代码中,在这种情况下,您不会分配给它,但我认为这很有用。如果没有,只需将if (window.opener)放在顶部即可。