我正在尝试使用 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 中)?
谢谢你的帮助!