Подтвердить что ты не робот

Какие конкретные причины заставляют IE8 запускать режим совместимости?

У меня есть приложение, которое при некоторых обстоятельствах заставляет IE8 всплывать сообщение о совместимости и перезагружать в режиме совместимости:

проблема с отображением интернет-обозревателя для обновления веб-страницы с использованием представления совместимости

Это редко, и, насколько я могу судить, это происходит не из-за мета-тегов. Это происходит как ответ на действие пользователя, которое изменяет DOM. Это та же проблема, что и https://superuser.com/info/215281/how-do-i-stop-i-e-jumping-into-compatability-view, но мой вопрос: какие вещи вызывают это, как помощь в ее исправлении.

Другими словами, см. этот сайт thesitewizard.com, где третья причина режима совместимости в IE8 описана как:

и, иногда, для какой-то другой непостижимой, недокументированной причины, о страниц, которые проверяются как совместимые со стандартами (или, по крайней мере, это в Release Candidate 1).

И вопрос: какие непостижимые, недокументированные причины?

4b9b3361

Ответ 1

После долгого отладочного сеанса (используя старые школьные предупреждения, чтобы точно определить, что там не удалось), эта, казалось бы, невидимая линия манипуляции с домом была виновником:

document.getElementById("literal"+varValue).style.display = "none";

Здесь не было ошибки, и элемент был, по-видимому, найден (т.е. это не указатель нулевой указатель сада).

Это приложение большого масштаба, и вокруг этого кода многое происходит. Я переключил его на следующее, и это, по-видимому, помешало проблеме:

setTimeout(function(){
           var layoutEl = document.getElementById("literal"+varValue);
           if (layoutEl)
               layoutEl.style.display = "none";
       },10)

Ответ 2

Следующий контент представлен в статье MSDN "" Управление рендерингом по умолчанию".


Имейте в виду, что определенные условия, например перечисленные здесь, могут заставить Internet Explorer отображать страницы в режиме совместимости документов, отличном от того, который указан на веб-странице.
  • Доступ к совместимости включен для страницы.
  • Страница загружается в зону интрасети, а Internet Explorer настроен на использование представления совместимости для страниц, загруженных из зоны Интернета.
  • Страница загружается из локальной файловой системы пользователя (это означает, что страница загружена в зоне интрасети), а Internet Explorer настроен на использование представления совместимости для страниц, загруженных из зоны Интернета.
  • Internet Explorer настроен для отображения всех веб-сайтов в представлении совместимости.
  • Internet Explorer настроен на использование списка просмотра совместимости, в котором указан набор веб-сайтов, которые всегда отображаются в представлении совместимости.
  • Инструменты разработчика используются для переопределения параметров, указанных на веб-странице.
  • На веб-странице возникла ошибка макета страницы, и Internet Explorer настроен на автоматическое восстановление после таких ошибок путем повторного открытия страницы в представлении совместимости.
  • Страница содержит метку веб-страницы, которая направляет ее для загрузки в определенную зону.

Эти ссылки содержат дополнительную информацию, описывающую, как Internet Explorer определяет соответствующий режим документа для веб-страницы:

Ответ 3

Я знаю, что у вас уже есть свой ответ, но сегодня я тоже искал то, что вызывало IE8 для запуска режима совместимости. Я искал код JavaScript, css (: first,: last и т.д.), Но он выглядел как встроенный стиль:

max-height в сочетании с переполнением.

Итак, это (также) запускает режим совместимости в IE8:

style="overflow:scroll;max-height:200px;"

И это не так, поэтому он решил мою проблему:

style="overflow:scroll;height:200px;"

Изменить: Я думаю, это связано: Переполнение IE8: авто с максимальной высотой

Ответ 4

Я знаю, что это старый вопрос, но я подумал, что добавлю что-то, что я только что натолкнулся. У меня возникла проблема, когда режим совместимости был принудительным, и я не мог отслеживать источник. Я вручную вывел страницу из режима совместимости и заметил, что некоторые символы не появляются. В итоге это был маркированный список, который использовал пользовательский символ на псевдоэлементе:

li:before {
  content: '\25B6';
}

В качестве быстрого исправления я закончил просто перезаписывать это для IE менее 9:

.lt-ie9 li:before {
  content: '';
}

Эта статья дала мне идею поиска неверных символов. Надеюсь, это поможет кому-то, если они наткнутся на подобную проблему!