6

我有以下代码,但 FB.login 给出了 FB is not defined javascript 错误。

我错过了什么?

<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>
4

3 回答 3

8

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

尝试在初始化和登录函数之间保留其他初始化代码

或者将 FB.login 代码保留在 $(document).ready

$(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'});

});
于 2012-02-01T08:53:30.023 回答
6

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

顺便说一句,一旦用户单击它,您已经拥有fb:login-button正在登录的内容。

于 2012-02-01T08:53:06.433 回答
1

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

于 2014-12-18T15:13:00.463 回答