facebook - 如何在window.fbAsyncInit外调用FB.api

标签 facebook facebook-javascript-sdk

所以我已经初始化了 fb api

window.fbAsyncInit = function() {
        FB.init({
          appId  : '351808841561163',
          status : true, // check login status
          cookie : true, // enable cookies to allow the server to access the session
          xfbml  : true,  // parse XFBML
          oauth: true
        });

我有一个单独的 js 文件,其中包含一个函数:

function example(){
  FB.api(
    '/me/[namespace]:visit',
    'post',
    { channel: link},
    function(response) {
       if (!response || response.error) {
          console.log(response.error);
       } else {
          console.log('Follow was success! Action ID: ' + response);
       }
    });
 }

当我调用它时,我得到 FB is undefined。

当我将函数放在 window.fbAsyncInit 中时,它工作正常,但我需要在 window.fbAsyncInit 外部调用 FB。

有没有办法做到这一点?

最佳答案

只需将您的函数排队,然后在 FB 初始化后立即调用它。以下代码保证您的函数将以正确的顺序调用,并在 FB 完成初始化后立即调用

您在示例之前和 FB 初始化脚本之前包含的帮助脚本:

var FB; // to avoid error "undeclared variable", until FB got initialized
var myQueue = new Array();
function queueAdd(f){
  if (FB == undefined)
    myQueue.push(f);
  else
    f();
}

function processQueue(){
  var f;
  while(f = myQueue.shift())
    f();
}

您的函数示例:

function example(){
  FB.api(
    '/me/[namespace]:visit',
    'post',
    { channel: link},
    function(response) {
       if (!response || response.error) {
          console.log(response.error);
       } else {
          console.log('Follow was success! Action ID: ' + response);
       }
    });
 }

queueAdd(example); // will run immediately if FB initialized. Otherwise, wait for FB first

和 Facebook 部分:

window.fbAsyncInit = function() {
  FB.init(blablabla);
  processQueue();
}

关于facebook - 如何在window.fbAsyncInit外调用FB.api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743356/

相关文章:

ruby-on-rails - 让 (omniauth-facebook) 和 (omniauth-twitter) 工作

iphone - 从 iPhone 应用程序在 Facebook 上分享视频

cordova - 使用 Phonegap Build 的 Facebook Connect 插件

javascript - Facebook comment.create 未在移动设备上触发 - ios Safari 和 android 浏览器

javascript - 如何用自定义图像替换 facebook 按钮?

iOS:发布到墙上时出现 Canvas URL 错误

database-design - Facebook墙的数据库结构

android - 如果已经登录,最好的方法是跳过 android 中的 facebook 登录页面

javascript - 使用没有弹出窗口的javascript sdk登录Facebook

ruby-on-rails - rails : Facebook Connect: Client Side/Server Side or Both?