我知道Stackoverflow上有一些类似的问题,但我在其中任何一个都没有解决方案,而且我现在非常绝望。 我正在写一个Facebook应用程序,到目前为止它的工作非常整洁。但FB.getLoginStatus函数不会为某些用户(一小部分)触发回调。我能够在一台机器上重现这个错误,它只发生在那里,只在Chrome上发生。另一位用户也只在Chrome上遇到此问题。我发现,如果我在自己的页面上移动Facebook API代码它是有效的(对此没有解释,我注释掉了其余的代码,它确实有时工作,但很多时候没有)。所以我将所有内容移动到一个自己的页面,并将我通过getLoginStatus函数获取的数据发送到另一个页面。这确实适用于我的电脑,但我的数据库中仍然有一些条目,它不适用于其他用户。 我不知道为什么回调没有被调用,我希望你可以帮助我,谢谢你提前!
TLDR:Facebook API不会在FB.getLoginStatus函数中触发回调。这只发生在一小部分机器上,我只能用2台机器(在Chrome上,不同的用户帐户,不同的操作系统)重现它。这是我正在使用的代码:https://jsfiddle.net/zfyb3zy4/
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '99999999999999999999',
xfbml : true,
version : 'v2.6'
});
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
localStorage.setItem("f_uid", response.authResponse.userID);
FB.api(response.authResponse.userID+"?fields=id,name,email",function(response) {
//window.location.href="game.html";
localStorage.setItem("name",response.name);
localStorage.setItem("email",response.email);
});
}
else {
FB.login(function (response)
{
if (response.authResponse == null)
top.location.href="https://www.facebook.com/anexiagmbh";
localStorage.setItem("f_uid", response.authResponse.userID);
FB.api(response.authResponse.userID+"?fields=id,name,email",function(response) {
//window.location.href="game.html";
localStorage.setItem("name",response.name);
localStorage.setItem("email",response.email);
});
}
,{scope: 'email'});
}
}, true);
};
function onLogin(response) {
if (response.status == 'connected') {
FB.api('/me?fields=first_name', function(data) {
var welcomeBlock = document.getElementById('fb-welcome');
welcomeBlock.innerHTML = 'Hello, ' + data.first_name + '!';
});
}
}
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>