X-UA-Compatible установлен в IE=edge, но он по-прежнему не останавливает режим совместимости

Я совсем запуталась. Я должен быть в состоянии установить

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

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

как вы должны убедиться, что IE делает не использовать режим совместимости (даже в интрасети)?

FWIW, я использование объявления HTML5 DocType (<!doctype html>).

вот первые несколько строк из страницы:

<!doctype html> 
<!--[if lt IE 7 ]> <html lang="en" class="innerpage no-js ie6"> <![endif]--> 
<!--[if IE 7 ]>    <html lang="en" class="innerpage no-js ie7"> <![endif]--> 
<!--[if IE 8 ]>    <html lang="en" class="innerpage no-js ie8"> <![endif]--> 
<!--[if (gte IE 9)|!(IE)]><!--> 
<html lang="en" class="innerpage no-js"> 
<!--<![endif]--> 
    <head> 
        <meta charset="ISO-8859-1" /> 
        <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

EDIT:я только что узнал что по умолчанию для IE8 используется режим совместимости IE7 для сайтов интрасети. Будет ли это переопределять метатег, совместимый с X-UA?

18 ответов


Если вам нужно переопределить параметры просмотра совместимости IE для сайтов интрасети, вы можете сделать это в интернете.config (IIS7) или через пользовательские заголовки HTTP в свойствах веб-сайта (IIS6) и установите X-UA-совместимый там. Метатег не переопределяет параметр интрасети IE в настройках представления совместимости, но если вы установите его на хост-сервере, он переопределит совместимость.

пример для web.config в Для IIS7:

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

редактировать: Я убрал clear код непосредственно перед тегом add; это была ненужная оплошность от копирования и вставки. Хороший улов, комментаторы!


серверное решение является рекомендуемым, поскольку @TimmyFranks предложил в своем ответе, но если нужно реализовать X-UA-Compatible правило на уровне страницы, пожалуйста, прочитайте следующие советы, чтобы извлечь выгоду из опыта того, кто уже обжегся


на X-UA-Compatible мета-тег должны появляются сразу после названия в <head> элемент. Никакие другие мета-теги, ссылки css и вызовы JS-скриптов не могут быть размещены до он.

<head>
    <title>Site Title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta charset="utf-8">
    <script type="text/javascript" src="/jsFile.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
    <link rel="shortcut icon" href="/apple-touch-icon.png" />
</head>

если они есть условные комментарии на странице (скажем, находится в <html>), они должны быть помещены под, после <head>.

// DON'T: place class inside the HTML tag 
<!--[if gt IE 8]><!--> 
    <html class="aboveIe8"> 
<!--<![endif]-->

// DO: place the class inside the BODY tag
<!--[if gt IE 8]><!--> 
    <body class="aboveIe8"> 
<!--<![endif]-->

команда Html5BoilerPlate написала об этой ошибке -http://h5bp.com/i/378 У них есть несколько решений.

Что касается просмотра интрасети и совместимости, есть настройки, когда вы идете в Инструменты > Настройки просмотра совместимости.

Compatibility view settings


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

header("X-UA-Compatible: IE=Edge");

Как оказалось, это связано с "интеллектуальный" выбор Microsoft чтобы заставить все сайты интрасети работать в режиме совместимости, даже если X-UA-Compatible установлено значение IE=edge.


Я также получил ту же проблему рендеринга IE9 в стандартах документов IE7 для локального хоста. Я пробовал много условных комментариев метки но unsuccesful. В конце концов я просто удалил все условные теги и просто добавил мета-тег сразу после головы, как показано ниже, и это сработало как шарм.

<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

надеюсь, что это помогает


даже если вы сняли флажок "Отображать сайты интрасети в режиме совместимости" и имеете X-UA-Совместимость в заголовках ответов, есть еще одна причина, по которой ваш браузер может по умолчанию использовать "просмотр совместимости" - ваша групповая политика. Посмотрите на консоль следующее сообщение:

HTML1203: xxx.xxx настроен для работы в режиме совместимости с помощью групповой политики.

где xxx.xxx-это домен для вашего сайта (т. е. test.com). Если вы видите это, то групповая политика для вашего домена устанавливается так, чтобы любой сайт заканчивался test.com будет автоматически отображаться в режиме совместимости независимо от doctype, заголовков и т. д.

для получения дополнительной информации см. следующую ссылку (объясняет html-коды):http://msdn.microsoft.com/en-us/library/ie/hh180764 (v=против 85).aspx


как указывает NEOSWF выше, условные комментарии Paul Irish останавливают мета-тег, имеющий какое-либо влияние.

здесь есть несколько исправлений (http://nicolasgallagher.com/better-conditional-classnames-for-hack-free-css/)

среди них:

добавление двух классов HTML, использование заголовков сервера и добавление условного комментария над doctype.

в моем последнем проекте я решил удалить условные комментарии пола Айриша. Мне не понравилась идея добавления чего-либо до html без предварительного тестирования, и приятно видеть, что было установлено, просто посмотрев на HTML.

в конце концов я окружил div сразу после тела и использовал условные комментарии, например

  <!--[if IE 7]><div class="ie7"><!--<![endif]-->
  ... regular body stuff
  <!--[if IE 7]></div><!--<![endif]-->

Я мог бы сделать это вокруг тела, но его сложнее с CMSs, как Wordpress.

очевидно, что это еще один DIV внутри разметки, но только для старых браузеров.

I думаю,это может быть решение на основе проекта.

Я также читал что-то о метатеге кодировки, который должен входить в первые 1024 байта, поэтому это гарантирует это.

иногда самые простые, самые легкие для чтения идеи являются лучшими и его определенно стоит подумать! Спасибо 6-м комментарию по ссылке выше за указание на это.


X-UA-Compatible будет переопределять только режим документа, а не режим браузера, и не будет работать для всех сайтов интрасети; если это ваш случай, лучшее решение-отключить "отображение сайтов интрасети в режиме совместимости" и установить параметр групповой политики чтобы указать, какие сайты интрасети нуждаются в режиме совместимости.


Я добавил следующее в мой файл. htaccess, который сделал свое дело:

BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie

кроме того, X-UA-совместимый должен быть первым метатегом в головном разделе

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>

кстати, правильный порядок или основные теги головы:

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta charset="utf-8">
    <title>Site Title</title>
    <!-- other tags -->
</head>

таким образом

  1. мы устанавливаем механизм рендеринга для использования, прежде чем IExplorer начнет обрабатывать
  2. документ затем мы устанавливаем кодировку для использования для всех браузеров
  3. затем мы печатаем заголовок, который будет обработан с уже определенным кодирование.

Для Nginx,

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

ref : https://github.com/h5bp/server-configs/commit/a5b0a8f736d68f7de27cdcb202e32975a74bd2c5


Тимми Фрэнкс сделал это правильно для меня. У нас просто была проблема сегодня, когда у клиента был IE8 по всей компании, и это заставляло сайт, который мы написали для их интрасети, в режим совместимости. Настройка "IE-Edge", казалось, исправила это.

<httpProtocol>
  <customHeaders>
    <clear />
    <add name="X-UA-Compatible" value="IE=Edge" />
  </customHeaders>
</httpProtocol>

IE 11 больше не позволяет переопределять параметр просмотра совместимости браузера, отправляя заголовок...

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

похоже, единственный способ заставить браузер не использовать представление совместимости-это отключить его в своем браузере. Наш сайт является интрасети, и по умолчанию IE вариант использовать представление совместимости для сайтов интрасети. Какая боль!

мы смогли предотвратить необходимость изменения пользователем настроек браузера для пользователей IE 9 и 10, но он больше не работает в IE 11. Наши пользователи IE переходят на Chrome, где это не проблема, и никогда не было.


я смог обойти эту загрузку заголовков до HTML с php, и это сработало очень хорошо.

<?php 
header( 'X-UA-Compatible: IE=edge,chrome=1' );
header( 'content: width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' );
include('ix.html');
?> 

ix.html содержание я хотел загрузить после отправки заголовков.


У меня была такая же проблема после попытки многих комбинаций, у меня была эта работа примечание. Я проверил совместимость для интрасети

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<head runat="server">

Если вы используете стек лампы, добавьте это в свой .файл htaccess в корневой папке web. Нет необходимости добавлять его в каждый файл PHP.

<IfModule mod_headers.c>
    Header add X-UA-Compatible "IE=Edge"
</IfModule>

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

я смог изменить профиль на рабочий стол после удаления CurrentVersion из реестра ключ:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode

после изменения режима на рабочий стол ответы на этот пост будут работать.


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

Это также происходит со мной при использовании домена и поддомена для подключения к стороне сервера. Машина ограничена для открытия в режиме совместимости для всех поддоменов.

ОТКЛЮЧИТЬ РЕЖИМ СОВМЕСТИМОСТИ ДЛЯ Интранет

HKEY_LOCAL_MACHINE-программное обеспечение-политики-Microsoft-Internet Explorer-BrowserEmulation - > IntranetCompalityMode значение должно быть 0 (ноль). А также удалить существующее доменное имя из PolicyList.

в противном случае вы можете добавить новое значение (DWORD), содержащее 0 (ноль) значение.