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