絮絮叨
第三方的登錄的解決方案通常有兩種方式,一是打開一個新的標籤頁,然後登錄回調回來; 二是通過父窗口打開一個子窗體去第三方登錄,登陸成功時關掉子窗體回到父窗口。
問題來了
我的父窗體怎麼樣才知道子窗體被關閉了呢?
查了下 w3c 裏面的文檔,貌似並沒有類似 onWindowClose 這樣的回調函數。
解決方案
將打開的這個窗口對象賦值給一個 jQuery 對象,在主窗體裏輪詢判斷該對象的狀態
1.打開第三方登錄窗口
var windowObj = null;
windowObj = window.open("https://graph.qq.com/oauth/show?which=Login&client_id=1000001&redirect_uri=http://127.0.0.1:3000/login/qq_after_login", "q",'width=800,height=500');
2.在子窗體中登錄成功時執行關閉自己的方法
self.close();
3.然後在主窗體裏面輪詢執行
var loop = setInterval(function() {
if(windowObj != null && windowObj.closed) {
clearInterval(loop);
//do something 在這裏執行回調
}
}, 800);