Вопрос: Что делает делать?


В чем разница, если одна веб-страница начинается с

<!DOCTYPE html> 
<html> 
  <head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 

и если страница начинается с

<!DOCTYPE html> 
<html> 
  <head> 
     <!-- without X-UA-Compatible meta -->

Если нет разницы, я полагаю, что могу просто проигнорировать X-UA-Compatiblemeta header, так как я просто хочу, чтобы он отображался в большинстве стандартных режимов во всех версиях IE.


1178


источник


Ответы:


Обновление до 2015 года

Этот ответ был опубликован несколько лет назад, и теперь вопрос действительно должен быть если вы даже подумаете об использовании X-UA-Compatibleтег на вашем сайте? с изменениями, внесенными Microsoft в его браузеры (подробнее об этом ниже).

В зависимости от того, какие браузеры Microsoft вы поддерживаете, вам может не понадобиться продолжать использовать X-UA-Compatibleтег. Если вам нужно поддерживать IE 9 или IE 8, я бы рекомендовал использовать тег. Если вы поддерживаете только новейшие браузеры (IE 11 и / или Edge), я бы подумал о том, чтобы полностью удалить этот тег. Если вы используете Twitter Bootstrap и вам необходимо устранить предупреждения валидации, этот тег должен появиться в указанном порядке. Дополнительная информация ниже:


Метатег X-UA-Compatible позволяет веб-авторам выбирать, какую версию Internet Explorer должен отображать страница. IE11 внесла изменения в эти режимы; см. примечание IE11 ниже. Microsoft Edge , браузер, который будет выпущен после IE11, будет отмечать только мета-тег, совместимый с X-UA, в определенных обстоятельствах. См. Примечание Microsoft Edge ниже.

Согласно Microsoft, при использовании тега X-UA-Compatible он должен быть как можно выше в вашем документе head:

Если вы используете метку META, совместимую с X-UA, вы хотите разместить ее как можно ближе к верхней части HEAD страницы. Internet Explorer начинает интерпретировать разметку с использованием последней версии. Когда Internet Explorer встречает метку META, совместимую с X-UA, она начинается с использования движка указанной версии. Это результат производительности, так как браузер должен остановить и перезапустить анализ содержимого.

Вот ваши варианты:

  • "IE = край"
  • "IE = 11"
  • "IE = EmulateIE11"
  • "IE = 10"
  • "IE = EmulateIE10"
  • "IE = 9"
  • «IE = EmulateIE9
  • "IE = 8"
  • "IE = EmulateIE8"
  • "IE = 7"
  • "IE = EmulateIE7"
  • "IE = 5"

Чтобы попытаться понять, что каждый означает, вот определения, предоставленные Microsoft:

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

  • Режим Edge указывает Internet Explorer отображать содержимое в самом высоком режиме. В Internet Explorer 9 это эквивалентно режиму IE9. Если будущий выпуск Internet Explorer поддерживает более высокий режим совместимости, страницы, установленные в режиме edge, будут отображаться в самом высоком режиме, поддерживаемом этой версией. Те же самые страницы будут отображаться в режиме IE9 при просмотре с помощью Internet Explorer 9.   Internet Explorer поддерживает ряд режимов совместимости документов, которые позволяют использовать разные функции и могут влиять на отображение содержимого:

  • Режим IE11 обеспечивает самую высокую поддержку, доступную для установленных и новых отраслевых стандартов, включая HTML5, CSS3 и другие.

  • Режим IE10 обеспечивает самую высокую поддержку, доступную для установленных и новых отраслевых стандартов, включая HTML5, CSS3 и другие.

  • Режим IE9 обеспечивает самую высокую поддержку, доступную для установленных и новых отраслевых стандартов, включая HTML5 (рабочий проект), каскадные таблицы стилей W3C 3 уровня (рабочий проект), спецификацию масштабируемой векторной графики (SVG) 1.0 и другие. [Примечание редактора: IE 9 не поддержка анимации CSS3].

  • Режим IE8 поддерживает множество установленных стандартов, в том числе спецификации каскадных таблиц стилей W3C уровня 2.1 и API селекторов W3C; он также обеспечивает ограниченную поддержку спецификации W3C Cascading Style Sheets Level 3 (рабочий проект) и других новых стандартов.

  • Режим IE7 отображает контент, как если бы он отображался в стандартном режиме Internet Explorer 7, независимо от того, содержит ли страница директиву.

  • Эмуляция режима IE9 указывает Internet Explorer использовать директиву для определения способа отображения содержимого. Директивы режима стандартов отображаются в режиме IE9, а режимы режима quirks отображаются в режиме IE5. В отличие от режима IE9, режим Emulate IE9 соответствует директиве.

  • Эмуляция режима IE8 указывает Internet Explorer использовать директиву для определения способа рендеринга содержимого. Директивы режима стандартов отображаются в режиме IE8, а режимы режима quirks отображаются в режиме IE5. В отличие от режима IE8, режим Emulate IE8 соответствует директиве.

  • Эмуляция режима IE7 указывает Internet Explorer использовать директиву для определения способа отображения содержимого. Стандартные режимы режима отображаются в стандартном режиме Internet Explorer 7, а режимы режима quirks отображаются в режиме IE5. В отличие от режима IE7, режим Emulate IE7 соответствует директиве. Для многих веб-сайтов это предпочтительный режим совместимости.

  • Режим IE5 отображает содержимое, как если бы он отображался в режиме quirks при помощи Internet Explorer 7, что очень похоже на то, как содержимое отображалось в Microsoft Internet Explorer 5.

IE 10 ПРИМЕЧАНИЕ: Начиная с Internet Explorer 10 режим quirks ведет себя иначе, чем в более ранних версиях браузера. В Windows Internet Explorer 9 и более ранних версиях режим quirks ограничивал веб-страницу функциями, поддерживаемыми Microsoft Internet Explorer 5.5. В Internet Explorer 10 режим quirks соответствует различиям, указанным в спецификации HTML5.

Лично я всегда выбираю http-equiv="X-UA-Compatible" content="IE=edge"meta tag, поскольку более старые версии содержат множество ошибок, и я не хочу, чтобы IE решил перейти в «Режим совместимости» и показать мой сайт как IE7 против IE8 или 9. Я всегда предпочитаю последнюю версию IE.

IE 11

Из Microsoft:

Начиная с IE11, режим edge - предпочтительный режим документа; он представляет собой самую высокую поддержку современных стандартов, доступных браузеру.

Используйте объявление типа документа HTML5 для включения режима edge:

<!doctype html>

Режим Edge был введен в Internet Explorer 8 и доступен в каждом последующем выпуске. Обратите внимание, что функции, поддерживаемые режимом edge, ограничены теми, которые поддерживаются конкретной версией браузера, отображающей контент.

Начиная с IE11, режимы документа устарели и больше не должны использоваться, за исключением временных. Обязательно обновляйте сайты, которые полагаются на устаревшие функции и режимы документа, чтобы соответствовать современным стандартам.

Если вы должны настроить таргетинг на определенный режим документа, чтобы ваш сайт функционировал во время его переделки, чтобы поддерживать современные стандарты и функции, имейте в виду, что вы используете переходную функцию, недоступную в будущих версиях.

Если вы в настоящее время используете заголовок, совместимый с x-ua, для установки режима устаревшего документа, возможно, ваш сайт не будет отражать лучший опыт работы с IE11.

Microsoft Edge (Замена для Internet Explorer, поставляемого в комплекте с Windows 10)

Информация о мета-теге, совместимом с X-UA, для версии IE «Edge». От Microsoft :

Представление режима «живого» пограничного документа

Как мы объявили в августе 2013 года, мы устареваем режимами документов с IE11. Благодаря нашим последним обновлениям платформы потребность в устаревших режимах документов в основном ограничивается веб-приложениями, устаревшими для предприятий. Благодаря новым архитектурным изменениям эти устаревшие режимы документа будут изолированы от изменений в режиме «живого» края, что поможет гарантировать гораздо более высокий уровень совместимости для клиентов, которые зависят от этих режимов, и поможет нам двигаться еще быстрее при улучшении Edge , Следующая важная версия IE по-прежнему будет соблюдать режимы документов, обслуживаемые сайтами интрасети, сайтами в списке просмотра совместимости и при использовании только в режиме Enterprise.

Публичные интернет-сайты будут отображаться с новой платформой Edge (без учета совместимости с X-UA). Наша цель заключается в том, что Edge является «живым» режимом документа здесь, и дальнейшие режимы документа не будут введены в будущем.

Поскольку изменения в Microsoft Edge больше не поддерживают режим документов в большинстве случаев, Microsoft имеет инструмент для сканирования вашего сайта проверить, есть ли у него код, который не совместим с Edge.

Chrome = 1 Информация для IE

Есть также chrome=1которые вы можете использовать или использовать вместе с одним из указанных выше вариантов, EX: <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> chrome=1для Google Chrome Frame, который определяется как:

Google Chrome Frame - это плагин с открытым исходным кодом для браузера. Пользователи, у которых есть подключаемый модуль, имеют доступ к открытым веб-технологиям Google Chrome и ускоренному движку JavaScript при открытии страниц в браузере.

Google Chrome Frame легко улучшает ваш браузер в Internet Explorer. Он отображает сайты с поддержкой Google Chrome Frame с использованием технологии рендеринга Google Chrome, предоставляя вам доступ к последним функциям HTML5, а также к функциям производительности и безопасности Google Chrome, никоим образом не прерывая обычного использования браузером.

Когда Google Chrome Frame установлен, сеть становится лучше, если вы не задумываетесь об этом.

Но для этого подключаемого модуля вы должны использовать chrome=1в метатеге X-UA-Compatible.

Дополнительная информация о Chrome Frame можно найти здесь ,

Заметка: Google Chrome Frame работает только для IE6 через IE9 , и был уволен 25 февраля 2014 года. Более подробную информацию можно найти здесь , Спасибо @mck за ссылку.

Проверка:

HTML5 :

Страница будет проверяться с помощью Валидатор W3 только при использовании <meta http-equiv="X-UA-Compatible" content="IE=Edge">, Для других значений это вызовет ошибку: A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.Другими словами, если у вас есть IE=edge,chrome=1он не будет проверяться. Я полностью игнорирую эту ошибку, поскольку современные браузеры просто игнорируют эту строку кода.

Если у вас должен быть полностью допустимый код, подумайте об этом на уровне сервера, установив HTTP-заголовок. Как отмечает Microsoft, If both of these instructions are sent (meta and HTTP), the developer's preference (meta element) takes precedence over the web server setting (HTTP header).Посмотреть профиль olibre's ответ или битнинов ответ для более подробной информации о том, как настроить HTTP-заголовок.

XHTML

Нет проблемы с проверкой при использовании <meta http-equiv="X-UA-Compatible" content="IE=Edge" />пока тег правильно закрыт, IE: />против >

Щебетать

Этот тег был настоятельно рекомендован командой Bootstrap с по крайней мере 2014 года, и Bootlint, linter, созданный командой twbs (https://github.com/twbs/bootlint) продолжает бросать предупреждение когда тег опущен. ЛИНТЕР различает предупреждения и ошибки, и поэтому серьезность отказа от этого тега может считаться незначительной.


Для получения дополнительной информации о X-UA-Compatible см. Microsoft Веб-сайт, определяющий совместимость документов ,

Дополнительные сведения о поддержке IE см. На веб-сайте caniuse.com

Для получения дополнительной информации о требованиях к загрузке Twitter, см. Проект bootlint wiki-страница


1437



использование content="IE=edge,chrome=1"Пропустить другие X-UA-Compatibleрежимы

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
                                   -------------------------- 
  • Нет значка совместимости
    В адресной строке IE9 не отображается Кнопка просмотра совместимости
    и на странице также не отображаются беспорядочные меню, изображения и текстовые поля.

  • Особенности
    Этот метатег необходим для включения javascript::JSON.parse()на IE8
    (даже когда <!DOCTYPE html>настоящее)

  • правильность
    Рендеринг / выполнение современных HTML / CSS / JavaScript более корректно (лучше).

  • Представление
    Двигатель рендеринга Trident должен работать быстрее в своем край Режим.


Применение

В вашем HTML

<!DOCTYPE html> 
<html> 
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  • IE=edgeозначает, что IE должен использовать последнюю (крайнюю) версию своего механизма рендеринга
  • chrome=1означает, что IE должен использовать Двигатель рендеринга Chrome если установлено

Или лучше в конфигурации вашего веб-сервера:
(см. также Ответ RiaD )

  • апаш как это было предложено pixeline

    <IfModule mod_setenvif.c>
      <IfModule mod_headers.c>
        BrowserMatch MSIE ie
        Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
      </IfModule>
    </IfModule>
    <IfModule mod_headers.c>
      Header append Vary User-Agent
    </IfModule>
    
  • Nginx как это было предложено Stef Pause

    server {
      #...
      add_header X-UA-Compatible "IE=Edge,chrome=1";
    }
    
  • лакировка прокси, как это было предложено Lucas Riutzel

    sub vcl_deliver {
      if( resp.http.Content-Type ~ "text/html" ) {
        set resp.http.X-UA-Compatible = "IE=edge,chrome=1";
      }
    }
    
  • IIS (поскольку v7)

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

Microsoft рекомендует Пограничный режим поскольку IE11

Как заметил Линду (см. комментарии), Изменения совместимости в IE11 рекомендует Пограничный режим :

Начиная с IE11, режим edge - предпочтительный режим документа;   он представляет собой самую высокую поддержку современных стандартов, доступных браузеру.

Но позиция Microsoft не ясна. Другая Страница MSDN не рекомендовала Пограничный режим :

Поскольку режим Edge заставляет все страницы открываться в стандартном режиме,   независимо от версии Internet Explorer,   у вас может возникнуть соблазн использовать это для всех страниц, просматриваемых в Internet Explorer.   Не делайте этого, поскольку X-UA-Compatibleзаголовок поддерживается только при запуске   с Windows Internet Explorer 8.

Вместо этого Microsoft рекомендовала использовать <!DOCTYPE html>:

Если вы хотите, чтобы все поддерживаемые версии Internet Explorer открывались   ваши страницы в стандартном режиме, используйте объявление типа документа HTML5 [...]

В виде Рикардо объясняет (в комментариях ниже) любой DOCTYPE (HTML4, XHTML1 ...) можно использовать для запуска режима стандартов, а не только для DOCTYPE HTML5. Важно всегда иметь DOCTYPE на странице.

Clara Onager даже заметил в более старой версии Определение устаревших режимов документа :

Режим Edge предназначен только для тестирования;   не используйте его в производственной среде.

Это настолько запутанно, что Usman Y думал Clara Onager говорил о:

Пример [...] приведен только для иллюстративных целей;   не используйте его в производственной среде.

<meta http-equiv="X-UA-Compatible" content="IE=7,9,10" >

Ну ... В оставшейся части этого ответа я даю больше объяснений, почему использование content="IE=edge,chrome=1"является хорошей практикой в ​​производстве.


история

В течение многих лет (с 2000 по 2008 год) Доля рынка IE составила более 80% , И IE v6 был рассмотрен как де-факто стандартная (от 80% до 97% доли рынка в 2003 , 2004, 2005 и 2006 гг. только для IE6, больше доли рынка со всеми версиями IE).

Поскольку IE6 не уважал Веб-стандарты , Разработчики имел для проверки своего веб-сайта с использованием IE6. Эта ситуация была отличной для Microsoft (MS), поскольку веб-разработчикам приходилось купить Продукты MS (например, IE нельзя использовать, не покупая Windows), и было более выгодно оставаться несоответствующим (т. Е. Microsoft хотела стать стандарт, исключая другие компании).

Поэтому многие сайты были совместимы только с IE6, и поскольку IE не соответствовал веб-стандарту, все эти веб-сайты не были хорошо отображены в браузерах, совместимых со стандартами. Еще хуже, многим сайтам требуется только IE ,

Однако в это время Mozilla запустила разработку Firefox, в максимально возможной степени соблюдая все веб-стандарты (другой браузер был реализован для рендеринга страниц, как это сделал IE6). Поскольку все больше и больше веб-разработчиков хотели использовать новые функции веб-стандартов, все больше и больше веб-сайтов больше поддерживались Firefox, чем IE.

Когда доля рынка IE снижалась, MS поняла, что оставаться стандартным несовместимым не была хорошей идеей. Поэтому MS начала выпускать новую версию IE (IE8 / IE9 / IE10) в отношении все более и более веб-стандартов.


Веб-несовместимая проблема

Но проблема в том, что все веб-сайты, предназначенные для IE6: Microsoft не может выпускать новые версии IE, несовместимые с этими старыми веб-сайтами, разработанными IE6. Вместо того, чтобы вывести версию IE, веб-сайт был разработан, MS попросила разработчиков добавить дополнительные данные ( X-UA-Compatible) на своих страницах.

IE6 по-прежнему используется в 2016 году

В настоящее время IE6 по-прежнему используется (0,7% в 2016 году) (4,5% в январе 2014 года), а некоторые интернет-сайты по-прежнему совместимы с IE6. Некоторые веб-сайты / приложения интрасети тестируются с использованием IE6. Некоторые веб-сайты интрасети на 100% работают только на IE6. Эти компании / отделы предпочитают откладывать затраты на миграцию: другие приоритеты, никто больше не знает, как реализован веб-сайт / приложение, владелец устаревшего веб-сайта / приложения обанкротился ...

Китай представляет 50% использования IE6 в 2013 году, но может измениться в следующие годы, поскольку Распространяется китайский дистрибутив Linux ,

Будьте уверены в своих веб-навыках

Если вы (попробуйте) уважать веб-стандарт, вы можете просто всегда использовать http-equiv="X-UA-Compatible" content="IE=edge,chrome=1", Чтобы поддерживать совместимость со старыми браузерами, просто не используйте последние веб-функции: используйте подмножество, поддерживаемое самым старым браузером, который вы хотите поддерживать. Или, если вы хотите пойти дальше, вы можете принять концепции как Изящная деградация , Прогрессивное улучшение а также Ненавязчивый JavaScript , (Вы также можете с удовольствием прочитать Что должен рассмотреть веб-разработчик? .)

Не волнует лучшая рендеринг версии IE: это не ваша работа, поскольку браузеры должны соответствовать веб-стандартам. Если ваш сайт соответствует стандарту и использует умеренно последние функции, поэтому браузеры должны быть совместимы с вашим сайтом ,

Более того, поскольку существует множество убийство IE6 ( IE6 не более , Кампания MS ), в настоящее время вы можете не тратить время на тестирование IE!

Персональный опыт IE6

В 2009-2012 годах я работал в компании, использующей IE6 в качестве разрешен официальный единственный браузер , Я должен был внедрить сайт интрасети только для IE6. Я решил уважать веб-стандарт, но с помощью подпрограммы, поддерживающей IE6 (HTML / CSS / JS).

Это было сложно, но когда компания переключилась на IE8, веб-сайт все еще был хорошо отображен, потому что я использовал Firefox и поджигатель для проверки совместимости с веб-стандартом;)


309



Разница в том, что если вы укажете только DOCTYPE, IE Настройки просмотра совместимости имеют приоритет. По умолчанию эти параметры заставляют все сайты интрасети просматривать совместимость независимо от того, DOCTYPE, Существует также флажок, чтобы использовать представление совместимости для всех веб-сайтов, независимо от того, DOCTYPE,

IE Compatibility View Settings dialog

X-UA-Compatibleпереопределяет параметры просмотра совместимости, поэтому страница будет отображаться в стандартном режиме независимо от настроек браузера. Это обеспечивает режим стандартов для:

  • страницы интрасети
  • внешние веб-страницы, когда администратор компьютера выбрал «Отобразить все веб-сайты в представлении совместимости» в качестве дефолтных компаний, правительств, университетов
  • когда вы непреднамеренно Список просмотра совместимости Microsoft
  • случаи, когда пользователи вручную добавили ваш сайт в список в настройках просмотра совместимости

DOCTYPEодин не может этого сделать; вы попадете в один из режимов просмотра совместимости в этих случаях, независимо от того, DOCTYPE,

Если и metaтега и HTTP-заголовка, metaтег имеет приоритет.

Этот ответ основан на изучении полных правил для выбора режима документа в IE8 , IE9 , а также IE10 , Обратите внимание, что DOCTYPEэто самый последний резерв для решения режима документа.


52



Используйте это, чтобы заставить IE скрыть эту раздражающую кнопку совместимости браузера в адресной строке:

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

24



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

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

<!--[if IE]>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<![endif]-->

Выполнение этого похоже на добавление любого другого условного оператора IE и работает только для IE, и никакие другие браузеры не будут затронуты.


22



I think this diagram from Microsoft explains all. In order to tell IE how to render the content, !DOCTYPE has to work with X-UA-Compatible meta tag. !DOCTYPE by itself has no affect on changing IE Document Mode.

enter image description here

http://ie.microsoft.com/testdrive/ieblog/2010/Mar/02_HowIE8DeterminesDocumentMode_3.png


12



Just for completeness, you don't actually have to add it to your HTML (which is unknown http-equiv in HTML5)

Do this and never look back (first example for apache, second for nginx)

Header set X-UA-Compatible "IE=Edge,chrome=1"

add_header X-UA-Compatible "IE=Edge,chrome=1";

11



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

To make this line work as expected, make sure that:

  1. It is the first element right after <head>
  2. No conditional comments are used before the meta tag, e. g. on the <html> element

Otherwise some IE versions simply ignore it.

UPDATE

These two rules are simplified but they are easy to remember and to verify. Despite MSDN docs stating you can put title and other meta tags before this one, I would not recommend to do so.

How make it work with conditional comments.

Interesting article about the order of elements in the head. (blogs.msdn.com, for IE)

REFERENCE

From the MSDN documentation:

The X-UA-Compatible [...] must appear in the header of the webpage (the HEAD section) before all other elements except for the title element and other meta elements.


7



if you use your website in the same network as the server IE likes to switch to compability mode despite DOCTYPE.
Adding meta http-equiv="X-UA-Compatible" content="IE=Edge" disables this unwanted behaviour.


4