2010-07-26 5 views
0

J'essaie d'implémenter une zone de commentaire XFBML sur une page. Il fonctionne dans Firefox et Chrome, mais seulement de façon sporadique dans Internet Explorer 8.Problème avec le chargement asynchrone de XFBML et Internet Explorer 8

Je reçois une erreur «FB is undefined» lorsque la page atteint le FB.XFBML.parse('fb-stuff');. Ai-je besoin de vérifier si le script Facebook Connect a terminé le chargement avant d'essayer d'analyser le fichier XFBML?

<script type="text/javascript"> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId : '117378991625799', 
      status : false, // check login status 
      cookie : false, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 
    }; 
    (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); 
     FB.XFBML.parse('fb-stuff'); 
    }()); 
</script> 

Répondre

2

Vous ne devriez pas avoir besoin d'appeler fb.xfbml.parse vous, puisque vous instruisant déjà facebook init pour le faire pour vous dans le fbAsyncInit. C'est utile surtout dans les situations où vous ajoutez de nouveaux éléments Facebook à la page après l'initialisation et que vous voulez qu'ils soient analysés et rendus.

Et oui, vous devez attendre le chargement de la bibliothèque javascript. C'est tout ce que fait fbAsyncInit. Vous créez l'élément de script pour la bibliothèque de connexion et l'injectez dans la dom de cette fonction anonyme, mais le chargement et l'évaluation du code par le navigateur prennent un certain temps, de sorte que FB n'est pas disponible immédiatement. Lorsque le script a été chargé (et que l'objet FB est disponible), il essaiera d'exécuter window.fbAsyncInit et vous pourrez alors faire tout ce dont vous avez besoin.

Questions connexes