弹出窗口存在吗? (JavaScript的)

时间:2011-03-29 08:14:58

标签: javascript browser popup

我正在尝试确定javascript中是否存在弹出窗口。我知道它的名字(传递给window.open()),但我没有窗口参考。例如,考虑一下:我有一个调用window.open('url', 'popup')的网页A,我有网页B也想要调用window.open('url', 'popup'),除非存在这样的弹出窗口。在这种情况下,B只关注弹出窗口。所以网页B没有提到弹出窗口(它不能有,我们可以假设A和B是独立的)。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

如果你玩弄窗户结构,你应该可以这样做。

每当我遇到这个问题时,我都有一个始终存在的主窗口。然后,当调用window.open时,我抓住该函数返回的处理程序,然后将其分配给我知道将永远存在的主窗口。

然后,每当调用window.open时,我都会关闭并检查主窗口,看它是否有弹出窗口的打开窗口处理程序。

所以,假设你有一个总是存在的主窗口(你总是可以使用一个窗口,使用一个框架来显示你的实际内容,所以,对你的用户来说,它看起来都一样),你可以做类似的事情:

var mainWindow = window;

while(mainWindow != mainWindow.parent){
   mainWindow = mainWindow.parent; 
}

if(mainWindow.PopupWindow === undefined || mainWindow.PopupWindow.closed){ 
  var handler = window.open('url', 'popup');
  mainWindow.PopupWindow = handler;
}

我在使用window对象的closed属性时总是遇到一些问题,因此您可能需要将一个函数映射到弹出窗口中的onunload事件,该事件只清除mainWindow上的PopupWindow变量,然后添加在你的if语句中检查。