我正在爲我工作的公司創建單一登錄服務。它必須擁有自己的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);
什麼是'win.CLOSED'?在'window.open()'的返回值上存在一個只讀屬性,叫做'closed',但這是全小寫的。您可以使用setTimeout來檢測彈出窗口何時關閉;當'win.closed'是'false'(其中'win'是'window.open()'的返回值)。 –
'win.CLOSED'的確是你在'window.open()'返回值上談論的屬性。 'win'變量保存來自'window.open()'調用的返回值,該調用打開彈出窗口。 Visual Studio Intellisense表示該房產全部上漲。所以這可能是我的一個錯誤。 – Feanaro
我也想過這個選擇,但對我來說這似乎是一個骯髒的選擇,所以這就是爲什麼我想問是否有更好的選項可用。 – Feanaro