Как определить, когда FB.init в facebook завершен - PullRequest
113 голосов
/ 23 августа 2010

В старом JS SDK была функция FB.ensureInit. Новый SDK, похоже, не имеет такой функции ... как я могу гарантировать, что я не делаю вызовы 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>

Ответы [ 12 ]

1 голос
/ 18 июня 2015

Иногда fbAsyncInit не работает. Я не знаю почему и тогда использую этот обходной путь:

 var interval = window.setInterval(function(){
    if(typeof FB != 'undefined'){
        FB.init({
            appId      : 'your ID',
            cookie     : true,  // enable cookies to allow the server to access// the session
            xfbml      : true,  // parse social plugins on this page
            version    : 'v2.3' // use version 2.3
        });

        FB.getLoginStatus(function(response) {
            statusChangeCallback(response);
        });
        clearInterval(interval);
    }
},100);
1 голос
/ 12 апреля 2012

Facebook API следит за FB._apiKey, поэтому вы можете наблюдать за этим, прежде чем вызывать свое собственное приложение API с чем-то вроде:

window.fbAsyncInit = function() {
  FB.init({
    //...your init object
  });
  function myUseOfFB(){
    //...your FB API calls
  };
  function FBreadyState(){
    if(FB._apiKey) return myUseOfFB();
    setTimeout(FBreadyState, 100); // adjust time as-desired
  };
  FBreadyState();
}; 

Не уверен, что это имеет значение, но в моем случае --потому что я хотел быть уверен, что пользовательский интерфейс был готов - я завернул инициализацию с готовым документом jQuery (последний бит выше):

  $(document).ready(FBreadyState);

Обратите внимание, что я НЕ использую async = true длязагрузите Facebook all.js, который, как мне кажется, помогает в входе в пользовательский интерфейс и более надежные функции вождения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...