gpt4 book ai didi

javascript - 检测关闭 "Request for Permission"窗口(谷歌账户登录)

转载 作者:行者123 更新时间:2023-12-05 07:54:04 25 4
gpt4 key购买 nike

我正在我的网站上实现 Google 帐户登录,但我遇到了以下问题:当用户选择使用他/她的 Google 帐户登录时,Google 的 Request for Permission 弹出窗口打开,如果用户关闭它,我无法以任何方式检测到它。

这是相关代码,使用GoogleAuth.attachClickHandler方法:

gapi.load('auth2', function() {
var auth2 = gapi.auth2.init({
client_id: 'my-client-id.apps.googleusercontent.com',
cookiepolicy: 'single_host_origin',
});
auth2.attachClickHandler(button, {},
function(googleUser) {
successHandler(googleUser);
}, function(error) {
failureHandler(error);
});
});

如果用户按下接受successHandler被调用,如果用户按下取消failureHandler被调用.但是,如果用户只是关闭此窗口,则什么也不会发生,我的网站会一直等待回调。

除了添加超时之外,还有什么方法可以检测到这一点吗?

最佳答案

所以,我想我想出了一个(非常丑陋的)解决方案。如果有人知道更好的方法,仍然欢迎回答。

基本上,我将默认的 window.open 函数替换为我自己的函数,并监视 Google 窗口是否打开,然后定期检查它是否关闭:

Function.prototype.isNative = function() {
return this.toString().indexOf('[native code]') > -1;
}

function registerGoogleTimeoutCallback() {
if (window.open.isNative()) {
var originalOpen = window.open;
window.open = function(URL, name, specs, replace) {
var newWindow = originalOpen(URL, name, specs, replace);
if (URL.indexOf('https://accounts.google.com/') === 0) {
var interval = setInterval(function() {
if (newWindow.closed) {
clearInterval(interval);
setTimeout(function() {
$(window).trigger('googleWindowClosed');
}, 2000);
}
}, 1000);
}
return newWindow;
}
} else {
throw 'window.open already replaced'
}
}

这样,我使用 $(window).on('googleWindowClosed', callback) 注册失败回调,还使用 ​​$(window).off('googleWindowClosed') 取消注册,以防成功。

关于javascript - 检测关闭 "Request for Permission"窗口(谷歌账户登录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31843544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com