5

我有以下代码但FB.login给出了FB未定义的javascript错误。FB未在Facebook中定义登录

我错过了什么?

<html> 
<body> 
<div id="fb-root"></div> 
<script> 
window.fbAsyncInit = function() 
{ 
FB.init 
({ 
    appId : 'XXXX', 
    status : true, 
    cookie : true, 
    xfbml : true 
}); 
}; 

(function() 
{ 
var e = document.createElement('script'); 
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
e.async = true; 
document.getElementById('fb-root').appendChild(e); 
}()); 



FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 


</script> 
hello 
<fb:login-button></fb:login> 

</body> 
</html> 

回答

7

分配给window.fbAsyncInit的函数在SDK加载后立即运行。任何你想在SDK加载后运行的代码都应该放在这个函数中,并且在调用FB.init之后。例如,您可以在这里测试用户的登录状态或订阅您的应用程序感兴趣的任何Facebook事件。

试图通过保持其他初始化代码在inialization和登录功能之间

或者保持的FB.login代码$(文件)。就绪

$(document).ready(function(){ 

FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 

}); 
5

加载JS-SDK之前,您应该不打电话FB.loginwindow.fbAsyncInit特别为此设计。如果您将此呼叫转移到window.fbAsyncInit函数内,您会很好,但请注意事实上拨打FB.login会打开弹出窗口,在没有用户交互的情况下执行此操作可能会被大多数浏览器阻止。如果你想使用FB.login来处理登录,你都必须做的clicksumbit事件......

顺便说一句,你已经有fb:login-button一旦用户点击它这是做登录。

1

,如果你尝试你也可以得到这个错误在您的机器上启动facebook example code(例如,复制.html文件中的代码并尝试在浏览器中打开它)。您需要将其上传到您的服务器并从那里运行。