首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检测facebook的FB.init何时完成

如何检测facebook的FB.init何时完成
EN

Stack Overflow用户
提问于 2010-08-23 22:27:57
回答 9查看 123.9K关注 0票数 119

旧的JS SDK有一个名为FB.ensureInit的函数。新的SDK似乎没有这样的功能……如何确保在api完全启动之前不进行api调用?

我在每个页面的顶部都包含了这样的内容:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId  : '<?php echo $conf['fb']['appid']; ?>',
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });
    FB.Canvas.setAutoResize();
  };

  (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);
  }());
</script>
EN

回答 9

Stack Overflow用户

发布于 2012-07-23 16:15:21

这是一个解决方案,如果你使用jquery和Facebook异步延迟加载:

// listen to an Event
$(document).bind('fbInit',function(){
    console.log('fbInit complete; FB Object is Available');
});

// FB Async
window.fbAsyncInit = function() {
    FB.init({appId: 'app_id', 
         status: true, 
         cookie: true,
         oauth:true,
         xfbml: true});

    $(document).trigger('fbInit'); // trigger event
};
票数 12
EN

Stack Overflow用户

发布于 2013-07-08 11:47:15

另一种检查FB是否已初始化的方法是使用以下代码:

ns.FBInitialized = function () {
    return typeof (FB) != 'undefined' && window.fbAsyncInit.hasRun;
};

因此,在页面就绪事件中,您可以使用setTimeOut检查ns.FBInitialized并将事件推迟到以后的阶段。

票数 10
EN

Stack Overflow用户

发布于 2014-06-17 03:09:45

虽然上面的一些解决方案有效,但我想我应该发布我们的最终解决方案-它定义了一个' ready‘方法,它将在FB初始化并准备好运行时立即触发。与其他解决方案相比,它的优点是在FB准备好之前或之后都可以安全地调用。

它的使用方法如下:

f52.fb.ready(function() {
    // safe to use FB here
});

这是源文件(请注意,它是在'f52.fb‘命名空间中定义的)。

if (typeof(f52) === 'undefined') { f52 = {}; }
f52.fb = (function () {

    var fbAppId = f52.inputs.base.fbAppId,
        fbApiInit = false;

    var awaitingReady = [];

    var notifyQ = function() {
        var i = 0,
            l = awaitingReady.length;
        for(i = 0; i < l; i++) {
            awaitingReady[i]();
        }
    };

    var ready = function(cb) {
        if (fbApiInit) {
            cb();
        } else {
            awaitingReady.push(cb);
        }
    };

    window.fbAsyncInit = function() {
        FB.init({
            appId: fbAppId,
            xfbml: true,
            version: 'v2.0'
        });

        FB.getLoginStatus(function(response){
            fbApiInit = true;
            notifyQ();
        });
    };

    return {
        /**
         * Fires callback when FB is initialized and ready for api calls.
         */
        'ready': ready
    };

})();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3548493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档