2010-07-26 1 views
0

Я пытаюсь реализовать блок комментариев XFBML на странице. Он работает в Firefox и Chrome, но только спорадически в Internet Explorer 8.Проблема с асинхронной загрузкой Facebook XFBML и Internet Explorer 8

Я получаю сообщение об ошибке «FB is undefined», когда страница попадает в FB.XFBML.parse('fb-stuff');. Мне нужно проверить, закончил ли сценарий Facebook Connect загрузку, прежде чем попытаться разобрать 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> 

ответ

2

Вы не должны вызывать fb.xfbml.parse себя, так как вы уже инструктажа facebook инициализации, чтобы сделать это для вас в fbAsyncInit. Это полезно в основном в ситуациях, когда вы добавляете новые элементы facebook на страницу после инициализации и хотите, чтобы их анализировали и отображали.

И да, вы должны дождаться загрузки библиотеки javascript. Вот что такое fbAsyncInit. Вы создаете элемент сценария для библиотеки подключений и вводите его в dom в этой анонимной функции, но браузеру требуется немного времени для загрузки и оценки кода, поэтому FB недоступен сразу. Когда скрипт загружен (и доступен объект FB), он попытается выполнить window.fbAsyncInit, а затем вы сможете делать все, что вам нужно.