3

使用 gapi.auth.authorize 函数,用户可以在不单击任何选项(没有接受或拒绝按钮)的情况下关闭弹出窗口。当这种情况发生时,我的回调函数不会触发,所以我无法处理这种情况。解决这种情况的方法是什么?

谢谢。

4

3 回答 3

1

这个问题已经存在了一段时间,但是当我调查这个问题时(我想在 google 身份验证窗口打开时显示一个微调器,如果用户决定不进行身份验证则隐藏它),并发现 gapi 正在抛出一个错误popup_closed_by_user。在抛出之前有两秒的延迟(有点长,Facebook 是即时的),但它确实有效。万岁,谷歌!

一些示例代码(角度 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;
    });
});
于 2017-08-28T17:33:47.100 回答
0

他们似乎没有在任何文档中提及它,但gapi.auth.authorize()返回了 popup Window。所以你可以保存返回Window并设置一个间隔或超时来检查Window.closed

于 2013-04-11T18:47:48.277 回答
0

所以你来自谷歌的 auth 函数返回promise,而不是一个窗口。但是您可以将原始窗口包装到函数中,该函数将设置间隔,以检查打开的窗口是否已经关闭。

// 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);
}

取自谷歌论坛上的一个主题。真的有效。

指向源的外部链接

于 2016-02-04T14:59:57.070 回答