Javascript 如何监听子窗口关闭?

Javascript 如何监听子窗口关闭?,javascript,dom-events,cross-domain,Javascript,Dom Events,Cross Domain,我正在通过以下方式打开Facebook共享的子窗口: window.open(sharingUrl,'','toolbar=0,status=0,width=626,height=436'); 当用户单击“共享”或“关闭”时,窗口将自动关闭 是否有方法向这些事件添加侦听器?如果在调用window.open()时存储对子窗口的引用,则可以使用setInterval()轮询,以查看窗口是否仍在使用window.closed属性打开。下面的示例每秒检查两次 var child = window.op

我正在通过以下方式打开Facebook共享的子窗口:

window.open(sharingUrl,'','toolbar=0,status=0,width=626,height=436');
当用户单击“共享”或“关闭”时,窗口将自动关闭


是否有方法向这些事件添加侦听器?

如果在调用
window.open()
时存储对子窗口的引用,则可以使用
setInterval()
轮询,以查看窗口是否仍在使用
window.closed
属性打开。下面的示例每秒检查两次

var child = window.open('http://google.com','','toolbar=0,status=0,width=626,height=436');
var timer = setInterval(checkChild, 500);

function checkChild() {
    if (child.closed) {
        alert("Child window closed");   
        clearInterval(timer);
    }
}
其他人注意:如果您曾经在子窗口中控制html,您可以利用该事件向父窗口发出警报。

这将很好

   <html>
<head>
<title>Detecting browser close in IE</title>
<script type="text/javascript">

window.onbeforeunload = function(){ myUnloadEvent(); }
function myUnloadEvent() {
    alert ('You can have Ur Logic Here ,');

}

</script>
</head>
</script>
</head>
<body >
<h1>Close the Window now</h1>
</body>
</html>

IE中浏览器关闭的检测
window.onbeforeunload=函数(){myUnloadEvent();}
函数myUnloadEvent(){
警报('你可以在这里有你的逻辑');
}
现在把窗户关上

为了以后的参考,我想分享另一个不需要设置间隔的解决方案:

var child = window.open('http://google.com','','toolbar=0,status=0,width=626,height=436');
child.onunload = function(){ console.log('Child window closed'); };

这对Oleg不起作用,因为他正在子窗口中打开Facebook页面。他(我猜)没有能力更改html的Facebook代码。他没有,这将是一个安全问题,你在跨域操作方面非常有限。然后你可以创建一个动态页面,生成100%大小的iframe,关闭后,该页面将在卸载前启动
onbeforeunload
。如果
setInterval
调用了一个后来才定义的函数,为什么会起作用?@HelpingHand由于函数提升。在Chrome这样的默认条件下,这难道不起作用吗?默认情况下,它会阻止弹出窗口,并且对child的引用将为空?因此,您可能会调用.closed来处理null/undefined,我认为这可能会出错。哦,如果页面只是试图在没有用户交互的情况下打开,Chrome会阻止弹出窗口。@PeterP。你说得对。这个答案并不能防止这种情况。我在这里写了一些简单的代码来展示所述问题的一般解决方案。当然有更多的事情要考虑。建设性的意见,而不是负1,将不胜感激。您使用了什么浏览器来测试此问题。同源适用,这使得在不同的域中不可能附加这样的处理程序。我尝试了这个。但即使用户从同一子窗口导航到不同的网页,卸载事件也会被触发。如何检测实际的窗口关闭?此解决方案帮助我。thx@diosney您可能已经解决了问题,但请为当前正在搜索类似问题的用户留下评论。我创建时禁用了窗口打开功能,因此只有在窗口关闭时才能识别卸载事件。