4

所以我初始化了 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 未定义。

当我把函数放在 window.fbAsyncInit 里面时它工作正常,但是我需要在 window.fbAsyncInit 外面调用 FB。

如果有任何可能的方法来做到这一点?

4

1 回答 1

12

只需将您的函数排队,然后在 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

和FB部分:

window.fbAsyncInit = function() {
  FB.init(blablabla);
  processQueue();
}
于 2012-10-05T12:37:10.443 回答