使用gapi.auth.authorize函数,用户可以关闭弹出窗口而不单击任何选项(不接受或拒绝按钮)。当这种情况发生时,我的回调函数不会触发,所以我无法处理这种情况。解决这种情况的方法是什么?
感谢。
答案 0 :(得分:0)
他们似乎没有在任何文档中提及它,但gapi.auth.authorize()
会返回弹出窗口Window
。因此,您可以保存返回的Window
并设置间隔或超时以检查Window.closed
。
答案 1 :(得分:0)
因此,Google的auth功能会返回承诺,而不是窗口。但是你可以将原始窗口包装到函数中,该函数将设置间隔,以检查打开的窗口是否已经关闭。
// 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论坛上的其中一个帖子。真的有效。
答案 2 :(得分:0)
这个问题已经存在了一段时间,但是当我调查这个问题时(我想在谷歌身份验证窗口打开时显示一个微调器,如果用户决定不进行身份验证则隐藏它),并发现这个问题抛出错误#
。在它被抛出之前有两秒钟的延迟(有点长,Facebook很快就会出现),但确实有效。万岁,谷歌!
一些示例代码(angular 1.x),popup_closed_by_user
是显示微调器的属性:
prompting