Эмулируйте IE7 для IE8, но не для IE9, используя «X-UA-Compatible» - PullRequest
42 голосов
/ 05 августа 2010

У меня есть веб-сайт в зависимости от векторного рисунка, для Internet Explorer я использую VML , а для других браузеров я использую SVG .IE8, однако, не поддерживает ни тот, ни другой, не возвращаясь к режиму IE7 с VML.

Поэтому я включаю <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />.

Проблема (ну, на самом деле хорошаяДело в том, что IE9 теперь поддерживает SVG, поэтому я не хочу, чтобы он переключился на режим IE7, который имеет гораздо худшую производительность и совместимость.Как сказать только IE8, чтобы он возвращался в режим IE7, но позволить IE9 оставаться в режиме IE9?

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

Ответы [ 8 ]

41 голосов
/ 02 декабря 2010

Я только что сыграл и нашел следующие работы для меня:

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

То есть с запятой, а не с запятой!

Я не смотрел на спецификации,но формат похож на content = "IE = 7, chrome = 1", который работает для Chrome Frame.Я также обнаружил, что content = "IE = 7,9" работает, но я подозреваю, что это неправильный формат.

Редактировать:

Остерегайтесь серьезных проблем, есливаша страница в фрейме.Если вы используете вышеизложенное на странице в рамке, где родитель находится в режиме в любом режиме, меньшем строгого IE9, то IE9 вернется в режим IE8 (игнорируя запрос IE = 7!),Любые известные обходные пути приветствуются :) Может не относиться к IE11.

Вышеприведенное, кажется, является побочным эффектом функции by design, что iframes (и я предполагаю, что кадры) либо все в режиме IE9, либо всеменьше, чем режим IE9.Никогда нельзя смешивать кадры IE9 с <кадрами IE9, см. Выпуски MS <a href="https://connect.microsoft.com/IE/feedback/details/599022/" rel="nofollow noreferrer"> # 599022 и # 635648 .

Редактировать 2:

Помните, что IE11 поддерживает только "IE = edge" (не IE = 11) и что использование IE = edge оказывает существенное влияние на функциональность IE (включая пользовательский агент).

Edit 3:

Изменить 4:

X-UA-Compatible удалено из браузера Microsoft Edge.Только Internet Explorer имеет режимы совместимости.Помните, что если вы используете WebView в приложении на Windows Phone 10, то вы по-прежнему используете IE11 (не Edge).

Кроме того, по ряду причин вы не можете доверять пользовательскому агенту, который сообщит вам правильные данные.уровень совместимости, вместо этого используйте document.documentMode из JavaScript.

27 голосов
/ 21 октября 2010

упомянутый кем-то еще двойной режим должен работать (но не , как показано в Microsoft ) и является наиболее близкой вещью, которую я видел в документации MS, которая должна работать какописано.Ниже приведено обновление, которое показывает правильную форму значения мета-атрибута.

Так что, если вы используете это:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">

К сожалению, вы получите рендеринг IE8 как IE8 из-за нечеткой векторизации версий, которую делает x-ua-совместимый движок.См. Этот документ: Определение совместимости документов: понимание значений атрибутов содержимого в MSDN.В этом разделе вы увидите, что в первом полугодии они определяют любой вектор версии, определенный как больший, чем текущая версия браузера, будет интерпретироваться как самый большой из доступных механизмов рендеринга.Следовательно, emulateIE9 get переводится как emulateIE8.Глупый.

Затем, практически на одном дыхании, они говорят об использовании нескольких векторов версий, как в приведенном выше фрагменте кода, для исключения конкретного движка.Но из-за нечеткой логики версий это никогда не сработает.Ах, Microsoft.Сбой снова.

Причина, по которой использование CC вокруг мета не работает, заключается в том, что браузер должен был выбрать механизм рендеринга к тому времени, когда он достигает CC.Мета x-ua должна стоять перед чем-либо еще в заголовке, кроме других метасов или заголовка в соответствии с собственной документацией MS.

Если кто-то может понять это, я весь слух, потому что я отчаянно хочу исключитьIE8 от поддержки, в том числе IE9.

ВАЖНОЕ ОБНОВЛЕНИЕ :

Robocat указывает, что использование запятой вместо точки с запятой, как показывает Micrsoft, является правильным способом сделать это,Я проверил это, и это сработало для меня.Я обновил тестовую страницу .

Итак, форма правильная такая (как предложено robocat):

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

Форма неверная такая (как предложено Microsoft):

<meta http-equiv="X-UA-Compatible" content="IE=7; IE=9">
3 голосов
/ 18 октября 2011

Если вы хотите, чтобы IE 8 использовал стандарты IE7, а IE 9 - стандарты IE9, то этот работает для меня:

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

Для IE9 это дает мне режим совместимости IE 9 со стандартами IE 9.Для IE8 это дает мне режим браузера IE8, режим документа стандарты IE7

3 голосов
/ 25 мая 2011

Я до сих пор использовал все это, на IE9 ничего не работает:

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

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

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

0 голосов
/ 30 июля 2015

Это работает для IE9 для меня.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>
0 голосов
/ 29 октября 2010

Wow Microsoft действительно создал здесь кошмар. Мы будем говорить об этом в будущем!

В любом случае это работает для меня.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9" />
0 голосов
/ 05 октября 2010

Я думаю, что вам нужно:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">

согласно http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx так как это указано как "... пример, который объединяет значения так, что IE8 отображает веб-страницу в режиме стандартов IE7, а IE9 отображает веб-страницу в режиме стандартов IE9:"

Однако я не могу заставить это работать.

0 голосов
/ 05 августа 2010
<!--[if IE 8]>
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<![endif]-->

Это называется условные комментарии
http://en.wikipedia.org/wiki/Conditional_comment

...