我试图让用户登录到Facebook,然后在警报中显示他们的用户ID。
然而,这段代码我没有得到任何回报。我做错了什么?
<html>
<head>
<title>Login to Facebook</title>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'APP ID',
channelUrl : 'http://www.mydomain.net/zoozTest/channel.html',
status : true,
cookie : true,
xfbml : true,
oauth : true,
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
//LOGIN FUNCTION
function login() {
FB.login(function(response) {
if (response.authResponse) {
alert('Success!');
}else{
alert('Login Failed!');
}
}, {scope: 'email'});
}
</script>
<div onclick="login();">Login with Facebook</div>
</body>
</html>
答案 0 :(得分:1)
您的代码,逐字复制,对我来说很好。三件事:
1:愚蠢的问题,但您已将“APP ID”替换为您的实际应用ID,对吧?否则那将是一个错误
2:检查您的应用设置。您是否正确指定了自己的应用域名和“带有Facebook登录网站”的网址?
3:从技术上讲,你有竞争条件。如果单击“使用Facebook登录”div并尝试在FB JS SDK初始化之前运行login()函数(它以异步方式加载),则会收到错误,因为不会定义全局FB对象。我会在window.fbasyncinit函数的底部粘贴一个console.log以确保定义FB(对于测试,对于生产,你可能想要阻止登录在Facebook被引入之前显示,或者构建一些一种队列,在尝试使用它之前检查是否定义了全局FB对象,如果没有,则添加到队列中。
你在javascript控制台中有错误吗?