Facebook登录中未定义FB

时间:2012-02-01 08:25:25

标签: facebook facebook-javascript-sdk facebook-login facebook-permissions

我有以下代码,但FB.login给出的FB没有定义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>

3 个答案:

答案 0 :(得分:7)

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

尝试在inialization和login function之间保留其他初始化代码

或者将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'});

});

答案 1 :(得分:6)

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

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

答案 2 :(得分:1)

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