Google api 认证 window 关闭回调
Google api authentication window closed callback
我正在尝试使用 javascript 从 google 获取联系人 api:
$(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 window 的情况外,没有任何反应。
有什么方法可以检查用户是否关闭了 window,以调用 $('body').removeClass('loading');
?
或者有什么方法可以在模态对话框容器中打开 gapi.auth.authorize window?这样我就可以很容易地检查它的状态。
这似乎可以解决问题:
(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:
$(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 window 的情况外,没有任何反应。
有什么方法可以检查用户是否关闭了 window,以调用 $('body').removeClass('loading');
?
或者有什么方法可以在模态对话框容器中打开 gapi.auth.authorize window?这样我就可以很容易地检查它的状态。
这似乎可以解决问题:
(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);
这不是最好的解决方案,但它确实有效