我正在使用Facebook登录功能,但遇到的问题是,如果在页面媒体加载完成之前点击Facebook登录按钮,它会阻止弹出式窗口进行Facebook登录,但如果我在等待一秒钟后再点击fblogin,则可以正常运行。
这是我正在使用的函数:
function fb_login() {
var email='';
console.log(loginClassbackQueue);
// console.log('user wants to login with fb');
FB.getLoginStatus(function(response) {
if(response.status!='connected'){
FB.login(function(response) {
// console.log(response);
if (response.authResponse) {
// console.log('user logged in successfully');
// console.log(response);
email = update_f_data_login(response);
$('#fb_login_popup, #popup_overlay').hide();
// loginme(email);
}
else {
loginClassbackQueue = [];
// console.log('user failed to login');
}
// console.log('fb login completed successfully');
}, {scope:"email,user_birthday,user_likes,user_location,friends_likes,publish_actions"}
);
}
else{
// console.log('logged in and connected');
email = update_f_data_login(response);
$('#fb_login_popup, #popup_overlay').hide();
}
});
}
当我在这个网站http://fab.com/上执行相同的操作时,它总是打开弹窗,从不阻止弹窗。
FB.getLoginStatus
的回调函数中调用FB.login
是可以的,并且在许多情况下,这正是正确的做法。你只需要确信登录状态已经被加载。最明显的方法是在FB.init
的选项对象中指定status: true
,但其他方式包括使用FB.getLoginStatus
、FB.login
或FB.ui
(技术上所有这些选项都使用了FB.ui
)并且异步过程必须完成。你还应该确保不要为第二个参数指定true
,例如FB.getLoginStatus(..., true);
。 - AndrewF