使用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