跨域window.close事件比如我是在域1:的Javascript:从父窗口
a.click(function(){
window.win=window.open(domain2,'name');
});
现在我对DOMAIN2,我关闭它。 window.win如何知道用户关闭了该窗口?是否有任何事件或财产要通过间隔检查?
跨域window.close事件比如我是在域1:的Javascript:从父窗口
a.click(function(){
window.win=window.open(domain2,'name');
});
现在我对DOMAIN2,我关闭它。 window.win如何知道用户关闭了该窗口?是否有任何事件或财产要通过间隔检查?
有这不是任何W3C规范的一部分的属性。这就是所谓的closed
,想
if(window.win.closed) {
// window was closed
}
获得访问我不知道关于跨浏览器了兼容性该属性。我也不确定这是如何在跨域的行为。但是,如果你尝试它,请让我和这个社区的其他人知道它。
另一种选择是你自己照顾通知。这意味着,您正在监听弹出式窗口中的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);
域2:
window.onbeforeunload = function() {
window.opener.postMessage('closed', 'http://www.popupdomain.com');
};
这个解决方案唯一需要注意的是,它仅适用于支持基本的HTML5浏览器兼容。还有其他(偷偷摸摸的)方式在古老的浏览器上进行跨域通信,但我想这是另一回事。
我工作在DOMAIN1的窗口从DOMAIN2打开了类似的问题。我需要检查窗户何时关闭。我尝试以下操作: -
我用window.onunload事件,它并没有因为Same Origin Policy工作,并表现出以下错误
错误:试图在清理范围内经营的编译和去脚本 源文件:铬://firebug/content/net/httpLib.js
错误:试图运行编译和去脚本在清理范围 源文件:铬://萤火/内容/火狐/ tabWatcher.js
但是我维持窗口对象的数组和施加“Window.closed”属性,它的工作原理,即使在横域。 :)
您也可以尝试postMessage API或CORS
您可以检查跨域被使用在窗户上的间隔检查关闭关闭属性。
var url = "http://stackoverflow.com";
var width = 500;
var height = 500;
var closeCheckInterval = 500; //Check every 500 ms.
var popup = window.open(url, "_new", 'width=' + width + ', height=' + height);
popup.focus();
var closeCheck = setInterval(function() {
try {
(popup == null || popup.closed) && (clearInterval(closeCheck), onWindowClosed());
} catch (ex) { }
}, closeCheckInterval);
var onWindowClosed = function() {
...
// Stuff to do after window has closed
...
}
[检测何时跨域弹出窗口关闭(http://stackoverflow.com/questions/4851438/detecting-when-a-cross-domain-popup-window-closes)非常相似。 – 2012-04-19 14:57:50