javascript - 在 FB.init 之后立即调用时,FB.api 不起作用

标签 javascript facebook facebook-javascript-sdk

FB.api 在 FB.init 之后立即调用时不起作用。这是我使用的代码片段:

window.fbAsyncInit = function() {
  FB.init({
    appId : window.APP_ID,
    status : true,
    cookie : true,
    oauth : true,
    channelUrl : window.MASTER_URL + "channel",
    frictionlessRequests : true
  });

  window.COMPANY.init();
};

(function() {
  var e = document.createElement('script');
  e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
  e.async = true;
  document.getElementById('fb-root').appendChild(e);
}());

这是我的 COMPANY.init() 和 COMPANY.fetchAllFriends():

friends: new Array(),

init : function() {
  // TODO

  COMPANY.fetchAllFriends();

  FB.Canvas.setSize($(document).height());
  FB.Canvas.setAutoGrow();
},    

fetchAllFriends : function() {
  FB.api('/me/friends', function(response) {
    if (!response || response.error) {
      return;
    }

    COMPANY.friends = new Array();
    $.each(response.data, function(index, value) {
      COMPANY.friends.push(value.id);
    });
  });
},

在 fetchAllFriends 的响应中包含错误,指出“必须使用事件访问 token 来查询有关当前用户的信息。”。我确保(通过浏览器调试器)在调用 FB.api 之前调用了 FB.init。

任何帮助将不胜感激!

最佳答案

好的,我解决了我的问题。我改变了:

window.fbAsyncInit = function() {
  FB.init({
    appId : window.APP_ID,
    status : true,
    cookie : true,
    oauth : true,
    channelUrl : window.MASTER_URL + "channel",
    frictionlessRequests : true
  });

  window.COMPANY.init();
};

到:

window.fbAsyncInit = function() {
  FB.init({
    appId : window.APP_ID,
    status : true,
    cookie : true,
    oauth : true,
    channelUrl : window.MASTER_URL + "channel",
    frictionlessRequests : true
  });

  FB.Event.subscribe('auth.login', window.COMPANY.init);
};

以防其他人想知道。我发现当 FB.init 返回时 FB JS SDK 还没有形成用户 session ,所以你需要做的是用你的 init 函数订阅 'auth.login' 事件。更多信息 here

关于javascript - 在 FB.init 之后立即调用时,FB.api 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494280/

相关文章:

javascript - 自定义图片上传文件按钮

javascript - 关于jquery中的气泡显示

javascript - FadeIn 和 FadeOut 同时触发

c# - .NET 的 SSO 选项

objective-c - iOS 6 从地址簿中读取 Facebook 用户名 ID

facebook-javascript-sdk - 通过 Facebook 登录 parse.com 时如何获取用户电子邮件

javascript - 语法错误: Unexpected token >

iphone - 将 iPhone 应用程序与 Facebook Twitter TwitPic 等集成

ajax - 使用 AJAX 连接 Facebook HTML5 点赞和评论元素

由于 CSP 规则,Facebook 聊天插件无法加载