2012-03-16 75 views
3

跨域window.close事件比如我是在域1:的Javascript:從父窗口

a.click(function(){ 
    window.win=window.open(domain2,'name'); 
}); 

現在我對DOMAIN2,我關閉它。 window.win如何知道用戶關閉了該窗口?是否有任何事件或財產要通過間隔檢查?

+0

[檢測何時跨域彈出窗口關閉(http://stackoverflow.com/questions/4851438/detecting-when-a-cross-domain-popup-window-closes)非常相似。 – 2012-04-19 14:57:50

回答

5

有這不是任何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瀏覽器兼容。還有其他(偷偷摸摸的)方式在古老的瀏覽器上進行跨域通信,但我想這是另一回事。

+0

從窗口返回的DOM對象。開放是空的。我希望可以有那個封閉的財產。其他解決方案? – Somebody 2012-03-16 11:53:35

+0

猜猜我不得不聽這個故事。 :) – Somebody 2012-03-16 11:59:31

+0

@Beck:那是因爲它不工作,或者你不能依賴html5? – jAndy 2012-03-16 12:05:17

0

我工作在DOMAIN1的窗口從DOMAIN2打開了類似的問題。我需要檢查窗戶何時關閉。我嘗試以下操作: -

  1. 我用window.onunload事件,它並沒有因爲Same Origin Policy工作,並表現出以下錯誤

    錯誤:試圖在清理範圍內經營的編譯和去腳本 源文件:鉻://firebug/content/net/httpLib.js

    錯誤:試圖運行編譯和去腳本在清理範圍 源文件:鉻://螢火/內容/火狐/ tabWatcher.js

  2. 但是我維持窗口對象的數組和施加「Window.closed」屬性,它的工作原理,即使在橫域。 :)

  3. 您也可以嘗試postMessage APICORS

1

您可以檢查跨域被使用在窗戶上的間隔檢查關閉關閉屬性。

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 
    ... 
} 
相關問題