Какие конкретные вещи заставляют IE8 запускать режим совместимости? - PullRequest
32 голосов
/ 25 января 2012

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

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

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

Другими словами, см. Этот сайт thesitewizard.com , где третья причина режима совместимости в IE8 описывается следующим образом:

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

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

Ответы [ 4 ]

7 голосов
/ 28 января 2012

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

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

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

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

setTimeout(function(){
           var layoutEl = document.getElementById("literal"+varValue);
           if (layoutEl)
               layoutEl.style.display = "none";
       },10)
5 голосов
/ 26 марта 2014

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

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

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

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

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

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

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

5 голосов
/ 11 июня 2013

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


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

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

2 голосов
/ 03 сентября 2014

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

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

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

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

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

...