Переопределить режим совместимости интрасети IE8 - PullRequest
200 голосов
/ 25 марта 2010

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

Ответы [ 19 ]

224 голосов
/ 04 мая 2011

Возможно переопределить режим совместимости в интрасети.

Для IIS просто добавьте приведенный ниже код в файл web.config. Работал у меня с IE9.

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

Эквивалент для Apache:

Header set X-UA-Compatible: IE=Edge

А для nginx:

add_header "X-UA-Compatible" "IE=Edge";

А для express.js:

res.set('X-UA-Compatible', 'IE=Edge')
84 голосов
/ 07 октября 2011

Майкл Иригойен прав, НО это немного сложнее ...

если вы используете замечательный шаблон Пола Айриша, у вас будет что-то вроде следующего: -

<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

Это НЕ будет работать должным образом и приведет к переходу IE в режим совместимости в среде Intranet , если у вас установлен флажок «Отображать сайты интрасети в режиме совместимости». Вам необходимо удалить условные комментарии IE, чтобы предотвратить режим совместимости с интрасетью.

Так что следующий код будет работать:

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

Обычно, если вы запускаете условные комментарии IE перед оператором <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">, вы будете вынуждены перейти в режим совместимости в среде Intranet , если вы используете IE9 с настройками по умолчанию.

ОБНОВЛЕНИЕ - ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Но учтите, что есть хитрость, которая заставит кипящую плиту HTML5 работать:

Добавьте emtpy, условный комментарий перед DOCTYPE. Также обратите внимание, что когда вы делаете , что , тогда вы можете также добавлять условные комментарии вокруг директивы X-UA-Compatible, что делает страницу HTML5-верной также. Так, например:

<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->

В блоге , вдохновленном первой частью этого ответа , есть больше деталей. И, кстати: Как уже упоминалось в этом сообщении в блоге, можно также заменить условный комментарий перед DOCTYPE на полуусловный комментарий на без условия : <!--[]-->. Таким образом, вот так:

<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->

Но учтите, что последний вариант (<--[]--><!DOCTYPE html>), как объяснено, например, этим ответом на другой вопрос , активирует хорошо известную проблему - для устаревших версий IE без поддержки X-UA-Compatioble (читай: для IE7 и IE6) - перевести браузер в режим quirks.

34 голосов
/ 17 апреля 2010

Если вы откроете меню «Сервис» и выберете «Параметры просмотра в режиме совместимости», в этом диалоговом окне внизу появится параметр «Отображать сайты интрасети в режиме совместимости». Если снять этот флажок, это должно решить проблему, и IE будет использовать режим, основанный на DOCTYPE.

19 голосов
/ 09 ноября 2012

В ответах на этот вопрос есть определенная путаница.

В настоящее время верхним ответом является решение на стороне сервера, которое устанавливает флаг в заголовке http, и некоторые комментарии указывают, что решение, использующее метатег, просто не работает.

Я думаю, что эта запись в блоге дает хороший обзор того, как использовать метаинформацию о совместимости, и в моем опыте работает так, как описано: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x-ua-compatible-to-create-durable-enterprise-web-applications.aspx

Основные моменты:

  • установка информации с использованием метатега и в заголовке оба работает
  • Метатег имеет приоритет над заголовком
  • Мета-тег должен быть первым тегом, чтобы браузер не определял механизм рендеринга ранее на основе эвристики

Один важный момент (и я думаю, что из-за этого возникает путаница), в IE есть два «класса» режимов:

  1. Режим документа
  2. Режим браузера

Режим документа определяет механизм рендеринга (как отображается веб-страница).

Режим обозревателя определяет, какую строку IE User-Agent (UA) отправляет на серверы, какой режим по умолчанию для Document Mode IE и как IE оценивает условные комментарии.

Более подробную информацию о режиме документа и режиме браузера можно найти в этой статье: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx?Redirected=true

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

Поэтому я бы рекомендовал использовать метатег (на html-странице), используя следующий синтаксис:

<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>

Примечание: приведите список режимов браузера, для которых вы тестировали.

В блоге также не рекомендуется использовать EmulateIEX. Вот цитата:

Это, как говорится, одна вещь, которую я нахожу странным, когда приложение запрашивает EmulateIE7 или EmulateIE8. Эти режимы эмуляции сами решения. Таким образом, вместо того, чтобы быть конкретным о том, что вы хотите, вы просить одну из двух вещей, а затем определить, какой из этих двух вещи, глядя в другом месте в коде для DOCTYPE (а затем пытаясь понять, даст ли вам этот DOCTYPE стандарты или причуды в зависимости от его содержания - другое, иногда запутывающее задача). Вместо того, чтобы делать это, я думаю, что это имеет гораздо больше смысла прямо указывать, что вы хотите, а не давать ответ, который сам по себе вопрос. Если вы хотите стандарты IE7, то используйте IE = 7, а чем IE = EmulateIE7. (Обратите внимание, что это не означает, что вы не должны использовать DOCTYPE - тебе следует.)

9 голосов
/ 24 июня 2010

Попробуйте этот метатег:

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

Он должен заставить IE8 отображаться как стандартный режим IE8, даже если установлен флажок «Отображать сайты интрасети в режиме совместимости» [для интрасети или для всех сайтов], я попробовалмоя собственная личность в IE 8.0.6

7 голосов
/ 20 апреля 2012

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

enter image description here

4 голосов
/ 31 июля 2012

Я нашел рабочий ответ, позволяющий переопределить проверенное представление о совместимости в интрасети. Просто добавьте в событие OnInit вашей страницы эту строку (не нужно ни meta, ни web.config customHeader):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
3 голосов
/ 10 мая 2013

Мне удалось переопределить режим совместимости, указав метатег как ПЕРВЫЙ ТЕГ в разделе заголовка, а не только как первый метатег, а как и только как ОЧЕНЬ ПЕРВЫЙ ТЕГ .

Спасибо @ stefan.s за то, что ответили на мой вопрос в вашем превосходном ответе. До прочтения что у меня было:

ЭТО НЕ РАБОТАЕТ

<head> 
<link rel="stylesheet" type="text/css" href="/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >

убрал тег ссылки, и он заработал

ЭТО РАБОТАЕТ :

<head><meta http-equiv="x-ua-compatible" content="IE=9" >

Таким образом, клиент IE8, настроенный на использование совместимости, отображает страницу в стандартном режиме IE8 - content = 'IE = 9' означает использование самого высокого стандарта, доступного до IE9 включительно.

3 голосов
/ 23 июля 2011

Попробуйте добавить в шапку следующее:

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

Предоставлено HTML5 Boilerplate Пола Айриша (но он работает и в XHTML Transitional).

2 голосов
/ 24 июня 2010

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

...