我有以下代码,但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>
答案 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.login
,window.fbAsyncInit
专门为此设计。如果你将此调用移到window.fbAsyncInit
函数内,你会没事的,但要注意调用FB.login
打开弹出窗口的事实,在没有用户交互的情况下执行此操作可能会被大多数浏览器阻止。如果您想使用FB.login
来处理登录,则必须在click
或sumbit
个活动中执行此操作...
顺便说一句,你已经有fb:login-button
,一旦用户点击它就会登录。
答案 2 :(得分:1)
如果您尝试在计算机上启动facebook example code(例如,复制.html
文件中的代码并尝试在浏览器中打开它),也会出现此错误。您需要将其上传到您的服务器并从那里运行。