Как Javascript может заставить IE 8 перезагрузить страницу в представлении совместимости?
Я тестирую довольно сложное веб-приложение на основе Javascript в Internet Explorer 8 в Windows Vista. После загрузки приложения IE находится в режиме браузера "Стандарты" и режиме документа "Стандарты IE 8". Во время работы приложения IE иногда перезагружает страницу и отображает сообщение, напоминающее что-то вроде "Проблема с отображением (URL) заставила Internet Explorer перезагрузить страницу в представлении совместимости" (не точное сообщение, я нахожусь на неанглийская версия Vista). После перезагрузки браузер находится в режиме Quirks.
Отладка кода Javascript была бесполезным упражнением, поскольку проблема не может быть надежно воспроизведена или сужена, поэтому я был бы признателен за понимание того, что может вызвать такое поведение.
3 ответа
Должна быть проблема с разметкой, которую вы обслуживаете / создаете через innerHTML
, Вот статья от команды IE, которая включает подробности об автоматическом восстановлении IE из разметки, которые невозможно правильно проанализировать в режиме стандартов IE8:
... в новом механизме компоновки есть определенные пути к коду, в которых при возникновении ошибки процесс компоновки не может корректно восстановиться, и мы сохранили утверждения об этих путях... Мы усовершенствовали этот опыт в выпущенной версии IE8 путем восстановления "жестких утверждений" макета с использованием представления совместимости. Другими словами, мы считаем, что показ страницы в том виде, в каком она была бы в IE7, обеспечивает лучший пользовательский интерфейс, чем отсутствие показа контента вообще.
Обратите внимание, что с помощью innerHTML
вызывает синтаксический анализатор HTML, поэтому он может вызвать эту проблему даже после загрузки страницы, если передается строка HTML, которой он не может быть ни головой, ни хвостом.
Похоже, автоматическое восстановление после сбоя происходит в самом рендерере. Это ошибка в самом IE, а не в ваших скриптах, поэтому отладка действительно будет сложной.
Это происходит на всех установках IE8? IE8 обновлен с последними исправлениями? (Может ли это быть ненадежным сторонним расширением?)
в принципе. на странице вы можете добавить метатег
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
или для всего сайта добавьте это в шапку:
X-UA-Compatible: IE=EmulateIE7