我打开一个这样的新窗口:
var newWindow = window.open('myPage.aspx', null, 'height=650,width=900,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=0, left=0');
我等着它关闭:
var windowTimer = window.setInterval(function () {
if (win.closed !== false) {
//If window is closed ...
window.clearInterval(windowTimer);
}
}, 100);
这适用于Chrome和IE9以及Edge ,但不适用于Firefox,为什么?
Firefox确实进入了该功能,但它永远不会进入win.closed if
,即使有一个else
它也没有进入它... 有没有替代它?
对我有用的解决方案:
在弹出窗口中:
//Fires an event on the window that opened it
window.onbeforeunload = function () {
window.opener.myEvent();
};
在主窗口:
window.myEvent= function () {
//This fires only when the popup gets closed on beforeunload
}
注意:必须将主窗口中要触发的事件声明为公共,以便可以访问它,如window.myEvent= function ()
答案 0 :(得分:1)
基本上,我认为最简单的方法如下:
function hasClosed(){
document.getElementById('open').textContent = 'window has been closed';
}
window.addEventListener('beforeunload', function(){
if(window.opener) window.opener.hasClosed();
});
document.getElementById('open').addEventListener('click', function(e){
e.preventDefault();
window.open('test.html');
});

<a href="#" id="open">open window</a>
&#13;
请注意,SO片段不允许打开窗口,因此代码在代码段内不起作用。只需复制代码并将其另存为名为test.html
的文件。
您不需要继续检查,孩子只需调用父项上的函数即可。这样做的好处是您没有使用资源来继续检查它。另外,请注意,在此窗口中导航时,如果加载了新页面,调用父函数,则会调用onbeforeunload
,但也许您可以执行hasClosed
函数中已经执行的检查
您可能希望将uuid
添加到您的窗口并将其传递给它,这样它就可以在结束时通知您它的身份,但这完全可以改进。