我有一些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 fall over here'。它报告:Uncaught TypeError:无法读取null的属性'opener'。
我正在测试“未定义” - 我需要做些什么才能让它在Chrome中运行?
答案 0 :(得分:2)
您错过了typeof
:
while (typeof x_win != "undefined")
// ----^
另外,我会对x_win
而不是typeof
支票进行真实性检查,因为我希望opener
为null
}而不是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;
虽然目前的窗口没有winX
,但我们得到opener
,但是在你的代码中你不会分配给它if (window.opener)
,但我认为它很有用。如果没有,只需将2.0
放在顶部。