如何在javascript中关闭父窗口时关闭子窗口?
答案 0 :(得分:2)
如果通过父窗口和子窗口表示弹出窗口和打开它的窗口,则无法完成此操作,但主窗口中的以下脚本将在主窗口关闭弹出窗口被卸载(即关闭或用户导航到另一个页面或刷新):
var popUp = window.open("popup.html", "popup", "width=300,height=200");
window.onunload = function() {
if (popUp && !popUp.closed) {
popUp.close();
}
};
历史记录:过去可以通过在dependent
调用的第三个参数中使用window.open
窗口属性在某些浏览器(例如Firefox)中执行此操作(例如var popUp = window.open("popup.html", "popup", "width=300,height=200,dependent");
)但according to quirksmode它不再受任何支持。我自己没有测试过。
答案 1 :(得分:0)
当从一个窗口打开多个子窗口并且您希望在父窗口关闭时关闭所有子窗口时,您需要在数组中存储子窗口引用。在窗口的onunload事件中,您可以迭代此数组并在每个子窗口引用上调用close()方法。要查看完整示例click here
window.onunload = function closeChildWin(){
for(var i=0; i<childwindows.length; i++){
try{
childwindows[i].close()
}catch(e){
alert(e);
}
}
}
答案 2 :(得分:0)
我在弹出窗口中创建弹出窗口时遇到了这个问题。在创建窗口名称之后访问它似乎什么也没做。
首先创建一个窗口:
popup = window.open(address, name, params)
首先我试图这样做:
window.onbeforeunload = function () {
popup.close()
}
但问题是名称&#39; popup&#39;在创建后无法访问。我没有得到回应。
所以这就是我的工作方式。在弹出窗口的javascript里面我添加了:
window.parent.onbeforeunload = function () {
window.close()
}
现在,只要父窗口关闭,所有&#34; child&#34;窗户也关闭了。即使弹出窗口下有弹出窗口弹出窗口。只要每个&#34; popup&#34;窗口有这个,它在任何窗口&#34;上面关闭&#34;它关闭了。