Javascript:来自父窗口的跨域window.close事件

Som*_*ody 4 javascript javascript-events cross-domain

例如我在domain1上:

a.click(function(){
  window.win=window.open(domain2,'name');
});
Run Code Online (Sandbox Code Playgroud)

现在我在domain2上,我正在关闭它.window.win如何知道用户关闭了该窗口?是否有通过间隔检查的事件或财产?

jAn*_*ndy 7

有一个属性不属于任何W3C规范.它被调用closed并且会被访问

if( window.win.closed ) {
    // window was closed
}
Run Code Online (Sandbox Code Playgroud)

我不确定该属性的跨浏览器兼容性.我也不确定这对跨域域的行为如何.但如果你尝试一下,请让我和这个社区的其他人知道.


另一种选择是您自己照顾通知.这意味着,您正在onbeforeunload弹出窗口中监听.当事件触发时,您可以使用HTML5的postMessage方法在跨域窗口之间进行通信.例如:

主窗口:

window.addEventListener('message', function(e) {
    if( e.origin === 'http://www.popupdomain.com' ) {
        if( e.data === 'closed' ) {
            alert('popup window was closed');
        }
    }
}, false);
Run Code Online (Sandbox Code Playgroud)

域2:

window.onbeforeunload = function() {
    window.opener.postMessage('closed', 'http://www.popupdomain.com');
};
Run Code Online (Sandbox Code Playgroud)

这个解决方案唯一需要注意的是它只与支持基本HTML5的浏览器兼容.还有其他(偷偷摸摸的)方法可以在旧的浏览器上进行跨域通信,但我想这是另一个故事.