Почему IE9 переключается в режим совместимости на моем сайте?


197

Я только что установил бета-версию IE9, и на созданном мной конкретном сайте (HTML5) IE9 переходит в режим совместимости, если я вручную не советую этого делать. Я попытался удалить несколько частей сайта, но без изменений. В том числе удаление всех включений CSS. На каком-то другом моем сайте все идет хорошо.

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

Тем не мение. Сайт, на котором он переходит в режим совместимости: http://alliancesatwar.com/guide/ Сайт, на
котором он отображается правильно: http://geuze.name/basement/ (я не могу опубликовать более 1 гиперссылки)

Оба используют один и тот же doctype и все. Эти сайты имеют много общего (кроме внешнего вида), используя один и тот же базовый шаблон (кодировка, метатеги, тип документа и один и тот же JavaScript)

Было бы здорово, если бы у меня был ответ для меня! Веб-сайт HTML5, который отображается в режиме IE7, довольно ... хромой.


5
Объясните пожалуйста "переход в режим совместимости"? Если вы видите обновление страницы и всплывающее окно с сообщением о том, что IE обновил эту страницу в представлении совместимости из-за проблемы, это означает, что вы обнаружили ошибку IE под названием «hard assert», которая похожа на сбой в механизме рендеринга. , Мы заинтересованы в поиске и исправлении этих проблем; пожалуйста, отправьте сообщение об ошибке на connect.microsoft.com/ie . Спасибо!
EricLaw

Ответы:


263

Работает в IE9 documentMode для меня.

Без X-UA-Compatibleзаголовка / мета, чтобы установить явный documentMode, вы получите режим, основанный на:

  • нажимал ли пользователь кнопку «просмотр совместимости» в этом домене ранее;
  • возможно также, произошло ли это автоматически из-за какого-то другого содержимого на сайте, что привело к аварийному завершению рендерера IE8 / 9 и откату к старому рендереру;
  • выбрал ли пользователь по умолчанию все сайты в режиме совместимости;
  • думает ли IE, что сайт находится в вашей интрасети, и по умолчанию использует представление совместимости;
  • находится ли данный сайт в собственном списке веб-сайтов Microsoft, для которых требуется совместимость.

Вы можете изменить эти настройки в меню «Инструменты -> Настройки представления совместимости» в меню IE. Конечно, это меню теперь скрытно скрыто, поэтому вы не увидите его, пока не нажмете Alt.

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

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

или заголовок HTTP:

X-UA-Compatible: IE=Edge

чтобы получить последний рендерер независимо от используемой версии IE.


79
Важное примечание: если IE 9 настроен на постоянное отображение сайтов интрасети в режиме совместимости, ни метатег, ни заголовок HTTP не будут переопределять это.
Джейкоб

29
Как упоминает Джейкоб, IE может по умолчанию отображать все локальные / интранет-сайты в режиме Compat. Нажмите alt -> Tools Compatability View settings и убедитесь, что у вас не установлен флажок.
Кори Моухортер

30
Мета-тег работал только для меня, когда я поместил его сразу после <head> (см. Также ответ ниже). Когда я поместил его дальше в элемент <head>, это не сработало (я все еще получил разорванную страницу).
Борис ван Скотэн

13
@Jacob: Это вводит в заблуждение. Да, вы будете в режиме совместимости браузера, и нет никакого выхода. Но вы все равно можете использовать HTTP-заголовок, чтобы установить режим документа, в котором когда-либо версия IE будет работать лучше для вашего сайта. IE = Edge всегда должен предоставлять вам новейший движок рендеринга. Таким образом, даже если вы технически находитесь в режиме совместимости, ваши страницы могут отображаться, как будто в обычном режиме. Поправьте меня, если я ошибаюсь, но, по крайней мере, наш сайт в интрасети работает точно так же (даже если установлен флажок «Показывать сайты интрасети в режиме совместимости»).
mkataja

7
@BorisvanSchooten: я не знаю, является ли это причиной, но <meta>теги должны быть в первых 512 байтах обработанного HTML-файла. Я говорю «обработано», потому что вы можете иметь все виды PHP, но визуализированный код - это то, что важно. Я попал туда, где разместил все свои комментарии <meta>под <meta>тегами, чтобы не нарушать требования.
doubleJ

33

я кладу

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

первым делом после

<head>

(Я где-то читал, не могу вспомнить)

Я не мог поверить, что это сработало !!


Вы должны закрыть вкладку и открыть новую вкладку, вы пробовали это?
Зеб

1
Он сказал "не сделал" не "не";)
Натан Дж. Б.

14
+1, это очень ценная заметка . Если у вас есть <script>s внутри <head>до этого metaоператора, он (IE = край) будет игнорироваться.
jakub.g

22

Чтобы заставить IE отображать в режиме стандартов IE9, вы должны использовать

<meta http-equiv="X-UA-Compatible" content="IE=edge">

Некоторые условия могут вызвать переход IE9 в режимы совместимости. По умолчанию это может происходить на сайтах интрасети.


Это работает на другом сайте. Так что этого не должно быть. Кроме того, этот метатег является злым, поскольку вам придется обновлять его вручную каждый раз, когда появляется новая версия IE.
Рене

2
Извините, я не могу решить вашу проблему. Тем не менее, я отредактировал свой ответ, чтобы использовать IE=edgeвместо него, который вызывает использование самого последнего доступного движка, всегда.
Делан Азабани

Ваше предположение неверно. Демонстрации указывают X-UA-Compatible, чтобы в IE не отображалась кнопка просмотра в режиме совместимости, поскольку, если пользователь нажимает ее, содержимое сайта будет работать некорректно.
EricLaw

@ReneGeuze, вы ошиблись. Edge всегда ссылается на последнюю версию IE.
neoswf

@DelanAzabani мой портал внутренней сети переключился в режим совместимости, даже если я добавил метатег, как вы предложили. пожалуйста, предложите, как это могло бы разрешиться и остаться на примере стандартного режима - IE 8, совместимость IE 8, тогда я хочу только IE 8.
DSI

6

Я разместил этот комментарий в отдельной ветке StackOverflow, но подумал, что стоит повторить здесь:

Для нашего собственного приложения ASP.Net добавление тега «X-UA-Compatible» на веб-странице, в файле web.config или в выделенном коде не имеет абсолютно никакого значения.

Только вещь , которая работала для нас было вручную отключить эту настройку в IE8:

введите описание изображения здесь

(Вздох.)

Эта проблема возникает только с IE8 и IE9 на сайтах интрасети. Внешние веб-сайты будут работать нормально и использовать правильную версию IE8 / 9, но для внутренних веб-сайтов IE9 внезапно решит, что это на самом деле IE7, и не имеет поддержки HTML 5.

Нет, я тоже не совсем понимаю эту логику.

Мое неохотное решение состояло в том, чтобы проверить , поддерживает ли браузер HTML 5 (создав холст и проверив, является ли он действительным), и показать это сообщение пользователю, если оно недействительно:

введите описание изображения здесь

Это не очень удобно для пользователя, но заставить пользователя отключить этот раздражающий параметр, кажется, единственный способ позволить им правильно запускать собственные веб-приложения HTML 5.

Или заставьте пользователей использовать Chrome. ;-)


1

Сайт по адресу http://www.HTML-5.com/index.html имеет метатег X-UA-Compatible, но все равно переходит в представление совместимости, как показано значком «порванная страница» в адресной строке. Как вы получаете опцию меню, чтобы заставить IE 9 (финальная версия 9.0.8112.16421) отображать страницу в режиме стандартов? Я попытался щелкнуть правой кнопкой мыши по этой порванной иконке страницы, а также по нажатию клавиши «Alt», чтобы отобразить дополнительные пункты меню, упомянутые Рене Гойце, но они не сработали.


4
Удалите условный комментарий IE вокруг мета. Вы обслуживаете страницу как application/xhtml+xml, поэтому используются правила синтаксического анализа XML; XML не поддерживает условные комментарии. В любом случае это не имеет никакого смысла; браузер должен выбрать режим, прежде чем он сможет решить, какие условные комментарии следует интерпретировать.
bobince

1

Кроме того, на более современных веб-сайтах, если вы используете условные операторы в своем HTML-теге согласно шаблону, это по какой-то причине приведет к тому, что ie9 по умолчанию перейдет в режим совместимости. Исправление здесь состоит в том, чтобы убрать ваши условные выражения из тега html и добавить их в тег body, другими словами, из раздела head. Таким образом, вы все еще можете использовать эти классы в своей таблице стилей для таргетинга на старые браузеры.


0

Выглядит хорошо для меня:

альтернативный текст

Вы уверены, что не в настройках глобально или что-то? Это чистая установка бета-версии на Windows 7. Инструменты разработчика сообщают, что на странице по умолчанию установлен стандартный режим IE9.


У меня было более 1 сообщения об этой ошибке. Хотя, возможно, это связано с базовым каталогом ( alliancesatwar.com ), что он также отображает все вложенные каталоги в режиме совместимости. Но тогда у меня возникает вопрос, что в корне сайта заставляет IE рендерить сайт в режиме совместимости? Так что, возможно, по крайней мере, это руководство написано правильно. Я надеюсь, что так.
Рене

@Rene Strange, я только что воспроизвел его, нажав на ссылку «Руководство» на главной странице. Но это случилось только один раз, и после нескольких попыток я еще не воспроизвел это, только один раз
И Цзян

0

Недавно мне пришлось решить эту проблему, и вот что я сделал:

Прежде всего, это решение заключается в настройке сервера Apache.

Второе основное мнение заключается в том, что в IE9 есть ошибка, которая означает, что метатег не будет работать, вместо этого решения попробуйте

  • найти / открыть свой httpd.conf
  • раскомментируйте / или добавьте следующую строку

    LoadModule headers_module modules/mod_headers.so
  • добавьте следующие строки

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • сохранить / перезапустить свой сервер Apache,

  • перейдите на свою страницу с IE9, используйте такие инструменты, как wireshark или fiddler, или используйте инструменты разработчика IE, чтобы проверить, есть ли там заголовок
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.