跨域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