我正在尝试使用Javascript将Facebook登录功能添加到我的网站。 我已经调用了FB.init和FB.login并获得了预期的弹出窗口,要求我使用我的Facebook凭据登录。对FB.login的调用请求user_birthday和电子邮件权限,所以我也得到了要求我允许这些权限的预期对话框。如果我接受,登录工作和控制将返回到我的父页面。
如果我不接受权限(点击取消按钮),接下来发生的事情似乎不一致。我希望弹出窗口会消失并将控制权返回给父窗口,然后父窗口就可以处理被拒绝的响应。最后,我想给我的用户一条消息,告诉他们取消时会发生什么。
相反,我有时会看到弹出窗口重定向到您直接登录Facebook时看到的主Facebook页面。有时弹出窗口变为空白并且只是坐在那里(它指向我在FB.init调用中指定的ChannelUrl页面)。在这两种情况下,在手动关闭弹出窗口之前,控件不会返回到父页面。
示例代码:
<html>
<body>
<div id="fb-root"></div>
<script language="Javascript">
window.fbAsyncInit = function() {
FB.init({
AppId : 'XXXXXXX',
channelUrl: 'http://www.mydomain.com/channel.html', //custom channel
status: true,
cookie: true,
xfbml: true,
oauth: true
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document))
function fbLogin()
{
FB.login(function (response){
if (response.authResponse) {
Debug("Auth Logged in");
}
else
{
Debug("Auth failed");
}
}, {scope:'user_birthday,email'});
}
function Debug(psMessage)
{ // something to provide feedback on what happened...
var objDebug = document.getElementById("Debug");
var objDate = new Date();
var sTime = objDate.getHours() + ":" + objDate.getMinutes() + ":" + objDate.getSeconds();
objDebug.innerHTML = sTime + " - " + psMessage + "<br>" + objDebug.innerHTML;
}
</script>
<form>
<input type="button" value="Log in" onClick="fbLogin();">
<br>
<br>
<br>
<br>
<div id="Debug"></div>
</form>
</body>
</html>
我尝试过各种各样的事情。我删除并创建了一个新的应用程序。我创建了channelUrl参数(它只包括
<script src="//connect.facebook.net/en_US/all.js"></script>
)。
有没有人对我做错了什么有任何见解(这似乎至少在Windows XP上的IE8,Safari 5.0.5和Firefox 11.0中都有发生)?
感谢您的帮助!
答案 0 :(得分:0)
我知道这是一个老线程,但希望我的解决方案可以帮助那些面临同样问题的人。
如果您使用旧的Facebook Apps信息中心,请停用您的沙盒模式。
如果您使用新的Facebook Apps信息中心,请点击状态和评论(位于左侧边栏),然后将“...可供普通公众”从“否”更改为“是”。
希望这可能会有所帮助。古德勒克;)