使用gapi.auth.authorize函數,用戶可以在不點擊任何選項(不接受或拒絕按鈕)的情況下關閉彈出框。當這種情況發生時,我的回調函數不會觸發,所以我無法處理這種情況。解決這種情況的方法是什麼?檢測用戶是否在使用gapi.auth.authorize時關閉彈出框
謝謝。
使用gapi.auth.authorize函數,用戶可以在不點擊任何選項(不接受或拒絕按鈕)的情況下關閉彈出框。當這種情況發生時,我的回調函數不會觸發,所以我無法處理這種情況。解決這種情況的方法是什麼?檢測用戶是否在使用gapi.auth.authorize時關閉彈出框
謝謝。
所以你從谷歌身份驗證功能返回承諾,而不是一個窗口。但是,你可以將原始窗口包裝到函數中,該函數將設置間隔,以檢查已打開的窗口是否已關閉。
// variable to store our deferred object
var authDefer = null;
function auth() {
// right before the auth call, wrap window.open
wrap();
// Call auth
authDefer = window.gapi.auth.authorize({
client_id: ...,
scope: ...,
immediate: ...
}).then(
// onSuccess,
// onReject,
// onNotify
);
}
function wrap() {
(function(wrapped) {
window.open = function() {
// re-assign the original window.open after one usage
window.open = wrapped;
var win = wrapped.apply(this, arguments);
var i = setInterval(function() {
if (win.closed) {
clearInterval(i);
if (authDefer) {
authDefer.cancel();
}
}
}, 100);
return win;
};
})(window.open);
}
取自Google論壇上的其中一個主題。真的有用。
這個問題已經有一段時間了,但是當我看着這個問題(我想說明一個微調,而谷歌的認證窗口打開,並隱藏它,如果用戶決定不進行身份驗證),並發現gapi正在拋出一個錯誤popup_closed_by_user
。在被拋出之前,有兩秒鐘的延遲(這很長,Facebook是即時的),但它確實有效。 Hooray,谷歌!
一些示例代碼(角1.x中),prompting
是顯示微調屬性:
_google_obj.prompting = true;
gapi.auth2.getAuthInstance().signIn().then(function(googleResponse){
var token = googleResponse.getAuthResponse().id_token;
SVC_exec_.post('/q/goog', 1000, { token: token }, 'signing you in through Google', function (response) {
if (response.code === 'ok') {
// update the UI
}
_google_obj.prompting = false;
});
},
function(error){
$timeout(function() {
console.log('user probably closed the google popup window: '+error);
_google_obj.prompting = false;
});
});
什麼選項都設置在新窗口中打開。我需要在新窗口中打開使用gapi – 2015-04-28 17:56:45
你知道嗎? – 2015-07-28 10:20:30