【问题标题】:window.fbAsyncInit / FB.init does not appear to be runningwindow.fbAsyncInit / FB.init 似乎没有运行
【发布时间】:2012-01-27 08:46:00
【问题描述】:

我刚刚开始使用 Facebook JavaScript SDK,我想做的只是让用户能够使用他们的 FB 帐户登录我的网站。首先,我输入 <div class="fb-login-button">Login with Facebook</div> 和样板,就像它在 Facebook for Websites 文档中所说的那样,位于 developers.facebook.com/docs/guides/web/#login

我单击 FB 登录按钮,弹出窗口,单击“允许”……但没有任何反应。我在任何地方都找不到像 fbsr_APPID 这样的 cookie(例如 Request.Cookies("fbsr_MYAPPID") 什么都没有出现),并且页面没有重定向到我在应用程序设置中指定的站点 URL。我添加了一些 JavaScript 进行调试,但实际上一无所获。

window.fbAsyncInit = function () {
    FB.init(
{
    appId: 'MYAPPID',
    channelUrl: http://bla,
    status: true,
    cookie: true,
    xfbml: true,
    oauth: true
});
    // Additional initialization code here
    alert("Please just prove this init code is running at all!!!!");

    FB.Event.subscribe('auth.login', function (response) {
        alert('Logged in: ' + response);
    }
    );

    FB.getLoginStatus(function (response) {
        alert('Check login: ' + response);
        if (response.authResponse) {
            var access_token = response.authResponse.accessToken;
            alert('Access token yay! ' + access_token);
        }
    });
};

没有显示任何警报或任何东西,导致我认为整个脚本无法运行。

我从那个 facebook 按钮切换到 developers.facebook.com/docs/authentication 中描述的服务器端身份验证链接,这次重定向肯定发生了,我在查询参数,但在 Init 中或作为事件处理程序运行任何 FB.JavaScript 方法时,我得到相同的 [缺少] 结果。我仍然找不到 facebook cookie(也许服务器端方法永远不会产生一个?)但我想通过 Ajax 调用或其他东西我将能够使用代码来获取 access_token(它会很好如果 FB 的文档提供了一些关于如何使用该代码的提示,但这是另一个问题)。

即使我尽可能放弃 Facebook 的 JavaScript SDK 并依赖服务器端脚本,我至少应该能够使用 FB.getLoginStatus。我可能做错了什么?

【问题讨论】:

  • 浏览器控制台出现什么错误?
  • 在您对系统的描述中没有提到所需的<div id=fb-root></div>... 有吗? :P
  • 哦,是的,
    存在。
  • @DMCS Firefox 和 IE9 不会在状态栏或任何内容中显示任何脚本错误。
  • 您能在 jsfiddle.net 上编写一个示例并在此处发布。这是我的一个样本,效果很好。 jsfiddle.net/dmcs/qrXkZ/2

标签: authentication facebook-javascript-sdk access-token


【解决方案1】:

我已将您的问题缩小到这一行

channelUrl: http://bla,

它应该是(当然是你的频道文件的真实网址:

channelUrl: 'http://bla',

【讨论】:

  • 是的,这正是问题所在。更准确地说,我没有使用文字 URL,而是使用更像 channelUrl : <?=channelURL?>, 的东西,并假设它会被分配为字符串,因为我将(服务器端)变量定义为字符串。啊不。一旦我将其更改为channelUrl : "<?=channelURL?>",,它就开始正常工作了。谢谢!
猜你喜欢
相关资源
最近更新 更多
热门标签