Для 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" /> 

РЕДАКТИРОВАТЬ: я только что узнал, что по умолчанию в IE8 используется режим совместимости IE7 для сайтов интрасети. Будет ли это переопределять метатег X-UA-Compatible?

18 ответов

Решение

Если вам необходимо переопределить параметры просмотра совместимости IE для сайтов интрасети, вы можете сделать это в файле web.config (IIS7) или через пользовательские заголовки HTTP в свойствах веб-сайта (IIS6) и установить X-UA-Compatible там. Мета-тег не переопределяет настройки внутренней сети 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 У них есть несколько решений.

Что касается представления "Интранет и совместимость", то при настройке инструментов> Параметры представления "Совместимость" имеются настройки.

Настройки просмотра совместимости

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

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

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

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

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

Надеюсь, поможет

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

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

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

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

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

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

Они включают:

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

В моем последнем проекте я решил удалить условные комментарии Пола Ирландского. Мне не понравилась идея добавить что-либо до html, не выполняя МНОГО тестов в первую очередь, и приятно видеть, что было установлено, просто взглянув на HTML.

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

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

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

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

Я думаю, что это может быть решение для каждого проекта, хотя.

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

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

Я добавил следующее в мой файл htaccess, что и помогло:

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

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

Кроме того, X-UA-Compatible должен быть первым метатегом в разделе head

<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";

ссылка: https://github.com/h5bp/server-configs/commit/a5b0a8f736d68f7de27cdcb202e32975a74bd2c5

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

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

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

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

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

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

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

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

ОТКЛЮЧИТЬ РЕЖИМ СОВМЕСТИМОСТИ ДЛЯ ИНТРАНЕТА

HKEY_LOCAL_MACHINE - ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ - Политики - Microsoft - Internet Explorer - BrowserEmulation -> IntranetCompalityMode Значение должно быть 0 (ноль). А также удалите существующее доменное имя из PolicyList.

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

Мне удалось обойти эту загрузку заголовков до 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 - это контент, который я хотел загрузить после отправки заголовков.

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

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

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

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

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

<!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">

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

<IfModule mod_headers.c>
    Header add X-UA-Compatible "IE=Edge"
</IfModule>
Другие вопросы по тегам