Выключить режим совместимости IE с помощью тегов

375

Я делаю работу для клиента, который включает режим совместимости на всех сайтах интрасети. Мне было интересно, есть ли тег, который я могу вставить в мой HTML, который отключает режим совместимости.

Аль Катавази
источник
Я думаю, что ответ, который вы ищете, находится здесь: stackoverflow.com/questions/1014666/…
Габриэль
45
На самом деле я искал прямо противоположное, кто устанавливает свои стандарты в режим совместимости, это просто безумие.
Аль Катавази
12
Плохой javascript в унаследованном приложении, которое дает сбой на любом другом компьютере, кроме IE7, и устанавливает стандарт совместимости. Однажды мы сможем заменить его ...
Пит-язычница
1
@ petethepagan-gerbil ты нашел время заменить его? : P
ледяной воды
1
@icedwater Я покинул компанию более 6 лет назад :) Мы делали небольшие улучшения, чтобы устранять проблемы всякий раз, когда у нас происходили изменения в той же области, но там никогда не было приоритета в долгах по технологиям. Не знаю, было ли это когда-нибудь исправлено.
Пит язычник-песчанка

Ответы:

536

Есть режим "край" .

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <title>My Web Page</title>
   </head>
   <body>
      <p>Content goes here.</p>
   </body>
</html>

Со связанной страницы MSDN:

В пограничном режиме Windows Internet Explorer отображает содержимое в самом высоком доступном режиме, что фактически нарушает парадигму «блокировки». В Internet Explorer 8 это эквивалентно режиму IE8. Если (гипотетический) будущий выпуск Internet Explorer будет поддерживать режим более высокой совместимости, страницы, переведенные в пограничный режим, будут отображаться в самом высоком режиме, поддерживаемом этой версией; однако те же самые страницы будут по-прежнему отображаться в режиме IE8 при просмотре с помощью Internet Explorer 8.

Тем не менее, режим «край» не рекомендуется в производственном использовании:

Веб-разработчикам рекомендуется ограничить использование режима Edge для тестирования страниц и других непроизводственных целей из-за возможных непредвиденных результатов рендеринга содержимого страницы в будущих версиях Windows Internet Explorer.

Честно говоря, я не совсем понимаю, почему. Но в соответствии с этим, лучший способ идти в данный момент - это использование IE=8.

Пекка
источник
7
По состоянию на 06.08.2012 Microsoft, похоже, использует IE=10на своих сайтах. Если вы проверили свой сайт в IE10 (предварительная версия), это безопасно использовать; в противном случае, вы можете придерживаться IE=9пока.
Calvinf
75
Я обнаружил, что это НЕ работает, если пользователь (или системный администратор) включил режим совместимости по умолчанию, выбрав и установив Tools->Compatibility View Settingsфлажок Отображать все веб-сайты в представлении совместимости. Чтобы решить проблему, я должен вернуть заголовок в ответе HTTP:X-UA-Compatible: IE=edge
speedplane
10
+1 к speedplane - режим совместимости IE10 включен по умолчанию для сайтов интрасети - UGH ... спасибо за поиск!
viperguynaz
132
Совет для тех, кто находит этот ответ, но не может заставить его работать на них. Мета-тег совместимости ДОЛЖЕН быть первым мета-тегом, и перед тегом не может быть никаких условных операторов IE. Подробнее: tesmond.blogspot.com/2011/10/…
Крис Соболевски,
2
Спасибо Крис! Я боролся с этим в течение 30 минут, когда наконец прочитал ваш комментарий. У меня не было этого сначала.
Хоки
91

После многих часов устранения неполадок в этом материале ... Вот несколько кратких советов, которые нам помогли из X-UA-Compatibleдокументов: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

С помощью <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • В Standard User Agent режимы (не-эмулировать них) игнорировать <!DOCTYPE>директивы в вашей страницы и рендер на основе стандартов , поддерживаемых этой версией IE (например, IE=8будет лучше повинуется разнос границы таблицы и некоторые псевдо - селекторы , чем IE=7).

  • Принимая во внимание, что режимы эмуляции говорят IE следовать любым <!DOCTYPE>директивам на вашей странице, отображая режим стандартов в зависимости от выбранной вами версии и режим причуд, основанный наIE=5

  • Возможные значения для contentатрибута:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"

brandonjp
источник
67

Если вы работаете со страницей в зоне интрасети, вы можете обнаружить, что IE9, независимо от того, что вы делаете, переходит в режим IE7 Compat.

Это связано с тем, что в настройках IE Compatibility указано, что все сайты интрасети должны работать в режиме совместимости. Вы можете снять галочку с помощью групповой политики (или просто снять галочку в IE) или установить следующее:

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

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

Amadiere
источник
3
спасибо за предупреждение о таблице стилей, это вызывало проблемы, и теперь я знаю причину!
eMRe
Да, первоначально ограбленный размещением. Спасибо за добавление этого.
Джон Мойлан
Спасибо, что было очень полезно. У них есть объект групповой политики, который устанавливает эффективный уровень IE на 7, хотя IE 11 установлен. Это избавило меня от необходимости вставлять какие-то прокладки на сайт, чтобы заставить js работать.
Чарльз Оуэн
28

Я верю, что это сделает свое дело:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Питер Рудерман
источник
28

Как предлагается в этом ответе на связанный вопрос, режим «ребра» может быть установлен в файле Web.Config. Это сделает его применимым ко всему HTML, возвращенному из приложения, без необходимости вставлять его на отдельные страницы:

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

Этот же шаг также можно выполнить, изменив «Заголовки ответа HTTP» с помощью диспетчера IIS для сервера IIS, всего веб-сайта или определенных приложений.

Эрик Андерсон
источник
19

Решение с метатегом не работает для нас, но установка его в заголовке ответа сделала:

header('X-UA-Compatible: IE=edge,chrome=1');
Лэнс Андерсон
источник
3
+1 за «хром = 1»; Я никогда не знал об этом. Что бы это ни стоило, изменив его на IE = 10, я решил ряд проблем с рендерингом на моем сайте, на которые IE = edge не повлиял.
Объяснение chrome=1свойства, stackoverflow.com/a/22059516/368691 . Имейте в виду, что Chrome Frame был удален. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus
1
см. комментарии к другим ответам ... Я обнаружил, что это НЕ работает, если пользователь (или системный администратор) включил режим совместимости по умолчанию, выбрав Инструменты-> Параметры просмотра в режиме совместимости и установив флажок Отображать все веб-сайты в представлении совместимости. , speedplane 19 апреля '13 в 11:29 7 Метатег совместимости ОБЯЗАН быть первым метатегом, и перед тегом не может быть никаких условных выражений IE. Подробнее: tesmond.blogspot.com/2011/10/… - Крис Соболевски, 19 августа '13 в 20:23
felickz,
Я попытался поставить его на первой строке страницы макета. Это не работает, Стю упомянул об изменении заголовков ответа IIS HTTP. Я старался. Я перезапустил пул приложений. Я проверяю больше. Эта страница вложена под другую страницу. На другой странице есть другая мета. Это производственный сайт. Так много людей получают доступ к этой странице. поставить этот тег на вершине невозможно. Любое другое решение или я винт
user12345
10

Еще несколько заметок на эту тему, основанных на моем недавнем опыте. В университете я работаю над проблемами ноутбуков с IE 8, установленным в режим совместимости для всех сайтов интрасети. Я попытался добавить метатег, чтобы отключить этот режим для страниц, обслуживаемых моим сайтом, но IE постоянно игнорировал этот тег. Как отметил Ланс в своем посте, добавление заголовка ответа устранило эту проблему. Вот как я устанавливаю заголовок на основе стандартного метода HTML5:

<IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=edge,chrome=1"
  # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
  <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
    Header unset X-UA-Compatible
  </FilesMatch>
</IfModule>

Для того, чтобы этот заголовок действительно был отправлен, вы должны убедиться, что в Apache включены mod_headers. Если вы хотите убедиться, что этот мод включен, поместите его на страницу, которая может запускать php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>
Cloudkiller
источник
У меня сработал метод .htaccess, в IE8 + он убрал кнопку совместимости (он же Enemy No. 1) и вынуждает IE8 избегать использования режима совместимости. Связанный: альтернатива метатега, кажется, работает только при определенных условиях (IE Voodoo) на разных компьютерах.
Уильям Истед
10

IE8 по умолчанию работает в стандартном режиме для внутренней сети и в режиме причуд для внутренней сети. Метатег HTML игнорируется, если для типа документа задан переходный xhtml. Решение состоит в том, чтобы добавить заголовок HTTP в коде. Это сработало для нас. Теперь наш сайт в интрасети заставляет IE8 отображать приложение в стандартном режиме.

Добавлено в PageInit базового класса страниц (ASP.net C #):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

ссылка: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html

rswank
источник
3

Это связано с тем, что в настройках IE Compatibility указано, что все сайты интрасети должны работать в режиме совместимости. Вы можете снять галочку с помощью групповой политики (или просто снять галочку в IE) или установить следующее:

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

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

Вот хороший пример того, какие браузеры поддерживают каждый отдельный элемент HTML 5.

http://html5readiness.com/

Обратите внимание на один общий знаменатель Google Chrome, он поддерживает все. Надеюсь, это поможет

пресмыкаться
источник
Похоже, что Firefox и IE 10 теперь также поддерживают все. В Chart это не так ясно, как в Chrome.
Тони Л.
0

Вставьте как самый первый элемент под тегом.

Это заставляет IE отображать страницу в физической версии IE, и игнорирует браузер «Настройка режима». Это можно установить в инструментах разработчика, попробуйте изменить его на более старую версию IE для тестирования, это следует игнорировать, и страница должна выглядеть точно так же.

technocrusaders.com
источник
0

Если у вас есть доступ к серверу, самый надежный способ сделать это - сделать это на самом сервере, в IIS. Перейдите к заголовкам ответа HTTP IIS. Добавить имя: X-UA-Compatible
Значение: IE = edge Это переопределит ваш браузер и ваш код.

сту
источник
Это сбрасывается при новом развертывании в IIS, если установлено на уровне веб-сайта
Pitts
0

Если вы хотите, чтобы каждая отдельная веб-страница загружала выбранный контент и использовала asp.net. Просто примените его как первый тег под тегом заголовка в Views> shared> Layout.cshtml.

просто совет

rubypeach888
источник