Почему, то есть, очевидно, перекомпоновка DOM при обнаружении элементы fbml при правильном использовании fbml xmlns?

У меня есть страница, содержащая несколько кнопок facebook "Мне нравится", встроенных с использованием встроенного метода fbml (в отличие от iframe). Достаточно просто. Страница отображается нормально, все работает, как ожидалось.

ОДНАКО ...

Как только я добавляю пространство имен xmlns: fb = "http://www.facebook.com/2008/fbml" декларируя документ, я замечаю радикальное снижение времени отрисовки начальной страницы в IE. Более внимательный анализ (с использованием инструментов разработчика ie8) показывает, что вся модель DOM, кажется, «обновляется» или «перекомпоновывается» снова и снова в течение короткого периода после начальной загрузки страницы. Дальнейшие размышления показывают, что количество перекомпоновок, очевидно, пропорционально количеству элементов в документе.

Удаление объявления xmlns решает проблему.

Кто угодно испытывали подобное раньше?

ОБНОВЛЕНИЕ:

Дальнейшее копание выявило еще некоторые особенности ... Проблема действительно в том, что IE повторно перенаправляет страницу, включая повторное выполнение любых встроенных скриптов и так далее. Причина, по-видимому, заключается не во включении XML-файлов как таковых, а в рендеринге самих кнопок в формате xfbml. Добавление xmlns просто запускало рендеринг xfbml, без xmlns кнопки вообще не отображались. Следующая разметка иллюстрирует проблему.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
  <head>  
    <script type="text/javascript">
      alert('some inline js');
    </script>
  </head>
  <body>
    <div id="fb-root"></div>

    <div>
      <fb:like href="http://example.local/1" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
      <fb:like href="http://example.local/2" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
      <fb:like href="http://example.local/3" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
    </div>

    <script src="http://connect.facebook.net/en_US/all.js#xfbml=1" type="text/javascript"></script>

  </body>
</html>

При запуске, то есть приведенный выше пример генерирует 3 предупреждения, я ожидаю увидеть только одно.

11
задан pnuts 16 November 2015 в 22:46
поделиться