1

我正在尝试使用 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 中)?

谢谢你的帮助!

4

1 回答 1

0

我知道这是一个旧线程,但希望我的解决方案能帮助面临同样问题的人。

  1. 如果您使用旧的 Facebook 应用仪表板,请禁用您的沙盒模式。

  2. 如果您使用新的 Facebook 应用程序仪表板,请单击状态和评论(在左侧栏)并将“...可供公众使用”从“否”更改为“是”。

希望这可能会有所帮助。祝你好运 ;)

于 2014-02-15T17:37:42.370 回答