我正在将 Google+ JS API 与我的网站集成,但遇到了一个奇怪的问题。当按下登录按钮时,我让它调用以下函数:
function googlePlusLogin() {
console.log("inside googlePlusLogin()");
gapi.auth.signIn({
'clientid' : '[id]',
'cookiepolicy' : 'single_host_origin',
'scope' : 'profile email',
'callback' : function() {console.log('test');}
});
}
第一次点击按钮时,控制台输出是:
inside googlePlusLogin()
test
正如预期的那样。但是,每次我单击按钮(触发上述函数)时,test
都会打印出增量。因此,例如,第二次单击按钮时,输出为:
inside googlePlusLogin()
test
test
第三次单击按钮时,输出为:
inside googlePlusLogin()
test
test
test
等等..
是什么导致了这种行为?
注意:我将其标记为 JavaScript
因为我认为这可能是我不理解的基本 JS 概念。
最佳答案
相当老了,但我遇到了同样的问题,所以供将来引用:
似乎每次调用gapi.auth.signIn
时,“回调”函数都会添加到某些回调列表中。因此,仅在第一次调用 gapi.auth.signIn
时设置回调参数,即类似
function googlePlusLogin() {
console.log("inside googlePlusLogin()");
if(window.__callback_initialized) {
gapi.auth.signIn({
'clientid' : '[id]',
'cookiepolicy' : 'single_host_origin',
'scope' : 'profile email'
});
} else {
gapi.auth.signIn({
'clientid' : '[id]',
'cookiepolicy' : 'single_host_origin',
'scope' : 'profile email',
'callback' : function() {console.log('test');}
});
window.__callback_initialized = true;
}
}
以 DRY 违规为模即可。
关于javascript - 为什么这个回调会被多次触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23944836/