Вимкніть режим сумісності IE за допомогою тегів


375

Я працюю для клієнта, який примушує режим сумісності на всіх сайтах інтрамережі. Мені було цікаво, чи є тег, який я можу вставити у свій HTML, який вимикає режим сумісності.


Я думаю, що відповідь, яку ви шукаєте, є тут: stackoverflow.com/questions/1014666/…
Габріель

45
Насправді я шукав прямо протилежне, хто встановлює свій стандарт на режим сумісності, це просто божевільно.
Al Katawazi

12
Поганий javascript у застарілому додатку, який виходить з ладу на будь-що, крім IE7, ось хто встановлює їх стандарт сумісності. Одного разу ми обходимось замінити його ...
Піт язичницько-гербіль

1
@ petethepagan-gerbil Ви зібралися замінити його? : P
крижана вода

1
@icedwater Я покинув компанію більше 6 років тому :) Ми вносили невеликі вдосконалення, щоб усунути проблеми, коли ми мали зміни в тій же області, але борг за техніку там ніколи не був пріоритетним. Не знаю, чи це коли-небудь виправлено в кінці кінців.
Піт язичницько-гербіль

Відповіді:


535

Існує режим "краю" .

<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:

Режим Edge повідомляє Windows Internet Explorer відображати вміст у найвищому доступному режимі, що фактично порушує парадигму "блокування". У Internet Explorer 8 це еквівалентно режиму IE8. Якщо (гіпотетичний) майбутній випуск Internet Explorer підтримував більш високий режим сумісності, сторінки, встановлені в режимі Edge, відображатимуться у найвищому режимі, підтримуваному цією версією; однак ці самі сторінки все одно з'являтимуться в режимі IE8 під час перегляду в Internet Explorer 8.

Однак режим "край" не рекомендується використовувати у виробництві:

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

Я, чесно кажучи, не зовсім розумію, чому. Але відповідно до цього, найкращий шлях на даний момент - це використання IE=8.


7
Станом на 6.08.2012 Microsoft, як видається, використовує IE=10на власних сайтах. Якщо ви протестували свій сайт в IE10 (версія для попереднього перегляду), це безпечно використовувати; в іншому випадку ви можете IE=9зараз дотримуватися .
calvinf

75
Я виявив, що це НЕ працює, якщо користувач (або sysadmin) увімкнув режим сумісності за замовчуванням, перейшовши на 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).

  • Беручи до уваги, що режими Emulate вказують 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"


67

Якщо ви працюєте зі сторінкою в зоні інтранет, ви можете виявити, що IE9, незалежно від того, чим займаєтесь, переходить у режим IE7 Compat.

Це пов’язано з налаштуваннями в настройках сумісності IE, в яких сказано, що всі сайти Інтранета повинні працювати в режимі сумісності. Ви можете зняти цей прапорець за допомогою групової політики (або просто скасуйте її в IE) або ви можете встановити наступне:

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

Це працює (як це детально описано в інших відповідях), але спочатку може не виглядати так: потрібно заздалегідь оголосити таблиці стилів . Якщо цього немає, це ігнорується.


3
дякую за попередження про таблицю стилів, це спричиняло проблеми, і я знаю причину зараз!
eMRe

Так, спочатку замурований розміщенням. Дякуємо, що додали це.
Джон Мойлан

Дякую, що було дуже корисно. У них є GPO, який встановлює ефективний рівень IE на 7, навіть якщо IE 11 встановлений. Це врятувало мене від необхідності розміщувати деякі сайти на сайті, щоб заставити js працювати.
Чарльз Оуен


28

Як пропонується у цій відповіді на відповідне запитання, режим "край" може бути встановлений у файлі Web.Config. Це дозволить застосувати його до всіх HTML, повернених із програми, без необхідності вставляти його на окремі сторінки:

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

Цей самий крок також можна виконати, змінивши "заголовки відповідей HTTP" за допомогою IIS Manager для сервера IIS, цілого веб-сайту чи конкретних програм.


19

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

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

3
+1 для 'chrome = 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
див. коментарі до інших відповідей ... Я виявив, що це НЕ працює, якщо користувач (або sysadmin) увімкнув режим сумісності за замовчуванням, перейшовши в меню Інструменти-> Налаштування перегляду сумісності та встановивши прапорець Показувати всі веб-сайти в Погляді сумісності . speedplane 19 квіт. 1313 о 11:29 7 Мета тег порівнянності ОБОВ'ЯЗКОВО має бути першим метатегом, а перед тегом не може бути НІ IE умовних операторів. Більше: tesmond.blogspot.com/2011/10/… - Кріс Соболевський 19 серпня
1313

Я спробував розмістити його на першому рядку на сторінці розмітки. Це не працює, Стю згадав про зміну заголовків відповідей 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>

Метод .htaccess працював для мене, в IE8 + Він видалив кнопку сумісності (він же Enemy № 1) і змушує IE8 уникати використання режиму сумісності. Пов'язано: альтернатива мета-тегів, здається, працює лише за певних умов (IE Voodoo) на різних комп’ютерах.
Вільям Істед

10

IE8 за замовчуванням застосовує стандартний режим для intERnet та режим примх для intRAnet. Мета-тег HTML ігнорується, якщо ви встановили тип doctype на перехід 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


3

Це пов’язано з налаштуваннями в настройках сумісності IE, в яких сказано, що всі сайти Інтранета повинні працювати в режимі сумісності. Ви можете зняти цей прапорець за допомогою групової політики (або просто скасуйте її в IE) або ви можете встановити наступне:

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

Мабуть, неможливо змінити параметри подання сумісності як групову політику, але це може бути змінено в реєстрі, цей метатег добре працює для мене, мені довелося зробити необхідний атрибут як частину HTML-форми , він працював у хромі та firefox, але не IE.

Ось приємна картина того, які браузери підтримують кожен окремий html 5 елемент.

http://html5readiness.com/

Зауважте один загальний знаменник Google Chrome, він підтримує все. Сподіваюся, це допоможе


Схоже, Firefox і IE 10 тепер також підтримують все. Діаграма не робить це так зрозуміло, як це стосується Chrome.
Тоні Л.

0

Вставте як перший пункт під тегом.

Це змушує IE відображати сторінку у фізичній версії IE, і він ігнорує браузер "Налаштування режиму". Це можна встановити в інструментах для розробників, спробуйте змінити його на більш стару версію IE, щоб перевірити, це слід ігнорувати і сторінка повинна виглядати точно так само.


0

Якщо у вас є доступ до сервера, найнадійніший спосіб зробити це - зробити це на самому сервері, в IIS. Увійдіть до заголовків відповідей IIS HTTP. Додати ім'я: X-UA-сумісне
значення: IE = edge Це перекриє ваш браузер і ваш код.


Це скидає нове розгортання до IIS, якщо встановлено на рівні веб-сайту
Еман Піттс

0

Якщо ви хочете, щоб кожна окрема веб-сторінка завантажувала вибраний вміст і використовує asp.net. Просто застосуйте його як перший тег під тегом заголовка в меню Перегляди> спільно> Layout.cshtml

просто порада

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.