如何在JavaScript中关闭父窗口时关闭子窗口?

3
如何在JavaScript中关闭父窗口时关闭子窗口?
3个回答

2

如果你指的是弹出窗口和打开它的窗口,你不能完全这样做,但是在主窗口中使用下面的脚本将在主窗口卸载时关闭弹出窗口(即关闭或用户导航到另一页或刷新):

var popUp = window.open("popup.html", "popup", "width=300,height=200");

window.onunload = function() {
    if (popUp && !popUp.closed) {
        popUp.close();
    }
};

历史记录:在一些浏览器(如Firefox)中,可以通过使用window.open调用的第三个参数中的dependent窗口属性(例如var popUp = window.open("popup.html", "popup", "width=300,height=200,dependent");)来实现此目的,但是根据quirksmode的说法,它已不再被任何浏览器支持。我自己没有测试过。


0
当从一个窗口打开多个子窗口,并且您想在关闭父窗口时关闭所有子窗口时,您需要将子窗口引用存储在数组中。在窗口的onunload事件上,您可以迭代此数组并在每个子窗口引用上调用close()方法。要查看完整示例点击这里
window.onunload = function closeChildWin(){
 for(var i=0; i<childwindows.length; i++){
  try{
     childwindows[i].close()
  }catch(e){
   alert(e);
  }
 }
}

0

在创建弹出窗口时,我遇到了这个问题。在创建后访问窗口名称似乎没有任何作用。

首先创建一个窗口:

popup = window.open(address, name, params)

一开始我试图做这个:

window.onbeforeunload = function () {
    popup.close()
}

但问题是创建后无法访问名称“popup”。我没有得到任何响应。

所以这就是我让它工作的方式。在弹出窗口的javascript中,我添加了:

window.parent.onbeforeunload = function () {
    window.close()
}

现在,每当父窗口关闭时,所有“子”窗口也会关闭。即使有弹出窗口在弹出窗口下面。只要每个“弹出”窗口都有这个功能,它就会在任何“上面”的窗口关闭时关闭。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接