Facebook登录中未定义FB

cdu*_*dub 6 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>
Run Code Online (Sandbox Code Playgroud)

Som*_*luk 7

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

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

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

});
Run Code Online (Sandbox Code Playgroud)


Jui*_*ter 6

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

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