javascript - Google api身份验证窗口关闭回调

标签 javascript google-api-js-client

我正在尝试使用 javascript api 从 google 获取联系人:

$(document).on('click', '#connect_to_google', function() {
    $('body').addClass('loading');
    var config = {
        client_id: GOOGLE_CP_CIENT_ID,
        scope: 'https://www.google.com/m8/feeds'
    };

    gapi.auth.init(function() {
        gapi.auth.authorize(config, function() {
            var token = gapi.auth.getToken();

            if (null !== token && (typeof token.access_token !== 'undefined')) {
                $.ajax({
                    url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token + "&alt=json&v=3.0",
                    dataType: "json",
                    cache: false,
                    success: function(data) {
                        //doStuff(data);
                        $('body').removeClass('loading');
                    },
                    error: function (xhr, error) {
                        $('body').removeClass('loading');
                    },
                    complete: function (xhr, error) {
                        $('body').removeClass('loading');
                    }
                });

            } else {
                $('body').removeClass('loading');
            }

        });         

    });
});

当客户端点击登录按钮时,页面会在其上显示一层 ($('body').addClass('loading');),以限制 Google 之外的任何用户交互授权页面。 一切正常,除了用户手动关闭 google auth 窗口的情况,然后什么也没有发生。 有没有办法检查用户是否关闭了该窗口,以调用 $('body').removeClass('loading');

或者有什么方法可以在模式对话框容器中打开gapi.auth.authorize窗口?这样我就可以很容易地检查它的状态。

最佳答案

这似乎可以解决问题:

(function(wrapped) {
    window.open = function() {
        var win = wrapped.apply(this, arguments);
        var i = setInterval(function() {
            if (win.closed) {
                clearInterval(i);
                $('body').removeClass('loading');
            }
        }, 100);
    };
})(window.open);

这不是最好的解决方案,但它确实有效

关于javascript - Google api身份验证窗口关闭回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31611828/

相关文章:

javascript - 使用带有 React 的 ES6 样式语法在浏览器中导入 JSON 文件

javascript - 如何使用 svg.js 制作 Ember 组件?

google-contacts-api - 使用 google api javascript 客户端访问 google 联系人 - 如何?

javascript - gapi.auth.authorize with immediate : true is not working

javascript - 我可以有一个 id 变量并且在调用客户端函数时遇到问题吗... google-apps-script

javascript - 将日期从毫秒转换为本地时区

javascript - CSS 和 JS 未加载到 JSP servlet 映射上

javascript - gapi.client.load 与 google.load

javascript - 传递字符串! ,' ' ... 符号到 jquery append

javascript - 使用 google javascript API 发送电子邮件退回邮件