第三方的登錄的解決方案通常有兩種方式,一是打開一個新的標簽頁,然后登錄回調回來; 二是通過父窗口打開一個子窗體去第三方登錄,登陸成功時關掉子窗體回到父窗口。
問題來了
我的父窗體怎么樣才知道子窗體被關閉了呢?
查了下 w3c 里面的文檔,貌似並沒有類似 onWindowClose 這樣的回調函數。
解決方案
將打開的這個窗口對象賦值給一個 jQuery 對象,在主窗體里輪詢判斷該對象的狀態
1.打開第三方登錄窗口
$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.然后在主窗體里面輪詢執行
$windowObj = null; var loop = setInterval(function() { if($windowObj != null && $windowObj.closed) { clearInterval(loop); //do something 在這里執行回調 } }, 800);
注:轉自尾巴很大的小平的博客http://blog.csdn.net/xiaoping0915/article/details/76165263