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-совместимый?

Ответ 1

Если вам нужно переопределить параметры просмотра совместимости 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; это был ненужный надзор от копирования и вставки. Хороший улов, комментаторы!

Ответ 2

Решение на стороне сервера является рекомендуемым, так как @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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

К ним относятся:

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

В моем последнем проекте я решил удалить условные комментарии Paul Irish. Мне не понравилась идея добавить что-либо перед html, не выполняя сначала LOTS тестирования, и приятно видеть, что было установлено, просто посмотрев на HTML.

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

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

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

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

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

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

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

Ответ 8

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

Ответ 9

Я добавил в свой файл htaccess следующее:

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

Ответ 10

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

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

Этот путь

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

Ответ 12

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

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

Ответ 13

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

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

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

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

Ответ 14

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

Ответ 15

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

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

Ответ 16

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

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

Ответ 17

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

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

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

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

Ответ 18

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

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

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

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

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