2013-10-18 113 views
1

我正在爲我工​​作的公司創建單一登錄服務。它必須擁有自己的JavaScript庫,就像Facebook爲其oAuth服務提供的一樣。我無法檢測窗口何時關閉,以便我可以實現故障處理程序。彈出關閉後觸發的事件

我試過使用window.onunload,但是登錄文檔的那一刻卸載,然後window.onunload被觸發。我試圖找到一種方法來檢查是否有方法檢查window是否處於關閉狀態。雖然沒有太多的運氣。

之後,我試着檢查window是否已通過使用window.CLOSED關閉。這不起作用,因爲window.onunload事件在窗口關閉之前觸發。

我查看了Mozilla Developer Network維基上的window對象,發現window.close事件。我嘗試過,但由於某種原因它不會啓動。

到目前爲止,我已經實現了代碼:

彈出 - 登錄:

window.onunload = function (e) { 
    try { 
     window.opener.postMessage([false], '*'); 
    } catch (e) {} 
}; 

彈出 - 登錄成功:

window.opener.postMessage([true, 'data' ], '*'); 
window.close(); 

開瓶器:

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; 
var eventer = window[eventMethod]; 
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; 
eventer(messageEvent, function (e) { 
    if (e.data[0]) { 
     this._data = JSON.parse(e.data[1]); 
     return _fireEvent('success', e.data[1]); 
    } else { 
     if (win.CLOSED) 
      return _fireEvent('failure'); 
    } 
}, false); 
+0

什麼是'win.CLOSED'?在'window.open()'的返回值上存在一個只讀屬性,叫做'closed',但這是全小寫的。您可以使用setTimeout來檢測彈出窗口何時關閉;當'win.closed'是'false'(其中'win'是'window.open()'的返回值)。 –

+0

'win.CLOSED'的確是你在'window.open()'返回值上談論的屬性。 'win'變量保存來自'window.open()'調用的返回值,該調用打開彈出窗口。 Visual Studio Intellisense表示該房產全部上漲。所以這可能是我的一個錯誤。 – Feanaro

+0

我也想過這個選擇,但對我來說這似乎是一個骯髒的選擇,所以這就是爲什麼我想問是否有更好的選項可用。 – Feanaro

回答