120 Stimmen

Wie man erkennt, wann die FB.init von Facebook abgeschlossen ist

Das alte JS SDK hatte eine Funktion namens FB.ensureInit. Das neue SDK scheint keine solche Funktion zu haben... wie kann ich sicherstellen, dass ich keine API-Aufrufe tätige, bis sie vollständig initiiert ist?

Ich füge dies oben auf jeder Seite ein:

<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>

1voto

jimmont Punkte 1960

Die Facebook-API achtet auf den FB._apiKey, so dass Sie darauf achten können, bevor Sie Ihre eigene Anwendung der API mit etwas wie aufrufen:

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

Nicht sicher, dass dies einen Unterschied macht, aber in meinem Fall--weil ich sicher sein wollte, dass die UI bereit war--ich habe die Initialisierung mit jQuery's Dokument bereit (letzte Bit oben) gewickelt:

  $(document).ready(FBreadyState);

Beachten Sie auch, dass ich NICHT async = true verwende, um die all.js von Facebook zu laden, die in meinem Fall bei der Anmeldung in der Benutzeroberfläche und der Steuerung von Funktionen zuverlässiger zu sein scheint.

1voto

pax Punkte 11

Manchmal funktioniert fbAsyncInit nicht. Ich weiß nicht warum und verwende dann diesen Workaround:

 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);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X