Вимкніть режим сумісності 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.