Проблема с асинхронной загрузкой Facebook XFBML и Internet Explorer 8

Я пытаюсь реализовать на странице поле комментариев XFBML. Он работает в Firefox и Chrome, но лишь от случая к случаю в 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>

person Joel    schedule 26.07.2010    source источник


Ответы (1)


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

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

person Mumakil    schedule 28.10.2010