IE10 отображает в режиме IE7. Как принудительно включить режим стандартов?

Ответы:

244

Internet Explorer исходит из предположения, что большинство веб-страниц были написаны для более ранних версий IE, и смотрит на doctype, метатеги и HTML для определения наилучшего режима совместимости (иногда неправильно). Даже с доктипом HTML5 IE по-прежнему переводит ваш сайт в режим совместимости, если это сайт интрасети.

Чтобы на вашем веб-сайте всегда использовался режим последних стандартов, вы можете убедиться, что Display intranet sites in Compatiblyон выключен. Однако вы должны сделать это на каждой машине, локальной для веб-сервера (инструкции приведены ниже).

В качестве альтернативы, что еще лучше, вы можете использовать X-UA-Compatibleзаголовок, чтобы отключить это на сервере. Важно отметить, что использование метатега не работает!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

В MSDN упоминается, что использование заголовка хоста или метатега должно перекрывать даже сайты интрасети. В статье Общие сведения о режимах совместимости в Internet Explorer 8 говорится следующее.

Большое количество внутренних веб-сайтов предприятий оптимизировано для Internet Explorer 7, поэтому это исключение по умолчанию сохраняет совместимость. ... Опять же, если метатег или заголовок http используется для установки режима совместимости для документа, он переопределит эти настройки.

Однако на практике это не сработает, использование заголовка хоста - единственный вариант, который работает. В разделе комментариев к статье также приведены многочисленные примеры именно этой проблемы.

Использование метатега также имеет несколько других проблем, таких как игнорирование тега, если он не находится непосредственно под <head>тегом или если перед ним слишком много данных (4k). Это также может вызвать повторный анализ документа в некоторых версиях IE, что замедлит отрисовку. Вы можете узнать больше об этих проблемах в статье MSDN « Лучшая практика: приведите свой HEAD в порядок» .

Добавление заголовка X-UA-Compatible

Если вы используете .NET и IIS, вы можете добавить это в web.config, вы также можете сделать это программно:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Если вы не используете IIS, это легко сделать на любом языке. Например, вот как это сделать в PHP:

header('X-UA-Compatible: IE=edge');

Пока X-UA-Compatibleзаголовок присутствует с типом документа HTML5, сайт всегда будет работать в режиме последних стандартов.

Отключение просмотра в режиме совместимости Отключение просмотра в режиме совместимости
может оказаться полезным. Для этого снимите флажок Display all intranet sites in compatibility viewв настройках просмотра совместимости.

Параметры просмотра совместимости

Вы можете вызвать это, нажав, Altчтобы открыть меню.

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

Изменить Этот ответ также относится к IE9.

Дэниел Литтл
источник
Простите за незнание, но как попасть на эту страницу настроек? Я проверил настройки Internet Explorer, щелкнул правой кнопкой мыши по представлению совместимости в адресной строке - ничего.
firedev 08
2
@Nick используйте altдля вызова панели инструментов, она находится под инструментами -> настройки просмотра совместимости
Дэниел Литтл
О, спасибо, похоже, это решило проблему. Возникает вопрос, зачем они вообще это сделали.
firedev
25
+1000;). SO должен заставить каждый OP увидеть этот ответ, когда у них есть какой-либо тег [IE] и слово «совместимый» в их вопросе, даже до того, как они фактически отправят этот вопрос.
Teemu
2
Я попытался добавить раздел настраиваемых заголовков в файл web.config проекта. Казалось бы, этот параметр не отменяет параметр IE для использования представления совместимости для сайтов интрасети.
DomenicDatti
25

Это работает для меня ..

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
JGilmartin
источник
11
NB, как сказал выше Лавински, «метатег ничего не делает для сайтов интрасети».
Nathan
2
Что бы это ни стоило, для размещенного веб-сайта (сайта, не входящего в интрасеть), который имеет X-UA-Compatibleметатег, но все еще не запускает режим документа IE10 Standards по умолчанию для страницы, я обнаружил, что если метатег расположен ниже тегов сценария или просто слишком далеко от вершины <head>дерева DOM IE10 плачет и устанавливает режим документа на стандарты IE8. Итак, держите ваш IE=edgeметатег закрытым <title>. Не всегда простое решение для сайтов Wordpress, если оно не прописано в файле шаблона заголовка. Не уверен, заботится ли IE11 о том, где находится метатег, но надеюсь, что это окажется кому-то полезным.
purefusion
1
Для слепых копий и пастеров, таких как я, отсутствует закрывающий тег. , <meta http-Equiv = "X-UA-Compatible" content = "IE = edge"> </meta>
Джон Ньюман,
Вам нужно закрыть только метатег, если вы используете XHTML doctype
Энди Брудткуль
2
Также этот тег должен быть первым тегом внутри <head>
Крис Гунавардена
10

Попробуйте добавить в голову следующий тег

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
Чжоу Ли Хуан
источник
5
Это должно быть IE=Edgeвместо этого
Дэниел Литтл
1
Но есть риск, что будущие версии IE
сделают
7
Нет, это не риск, если вы следуете спецификации, вы не увидите, чтобы люди делали это для Chrome.
Дэниел Литтл
1
Этот тег должен быть первым тегом внутри <head>
Крис Гунавардена
1
Редактирование этого ответа демонстрирует, почему это не очень хорошая идея. Принятый ответ - лучшее решение.
Давид Гранадо
2

Метатег ничего не делает для сайтов интрасети, и моя проблема заключалась в рендеринге IE10 в режиме совместимости с IE10. Что решило проблему для меня, так это то, что я взял ответ @ Jeow и использовал это значение в заголовке http, добавив следующее в web.configIIS:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

Для целей IE к сайтам интрасети относятся общедоступные сайты, которые не маршрутизируются извне - например, сотрудник Stackoverflow, работающий из офиса, вероятно, увидит stackoverflow.com в режиме совместимости.

OV
источник
1

У меня это отлично сработало, когда я сделал следующее:

На http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

Использовал точный пример, который они предоставляют в первом поле (добавлено недостающее </html>внизу), открыл его в IE10, и стандарты были принудительно приняты, я думаю, вам может понадобиться фактическое содержимое в html, чтобы заставить стандарты не уверены.

Я предлагаю заменить ваш пустой код фактическим содержимым (чем-то простым) и посмотреть, что он делает.

ZacNespral21
источник