Подтвердить что ты не робот

Эмулируйте IE7 для IE8, но не для IE9, используя "X-UA-Compatible"

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

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

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

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

4b9b3361

Ответ 1

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

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

То есть с запятой, а не с двоеточием!

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

Edit:

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

Вышеприведенное кажется побочным эффектом функции дизайна, что iframes (и я предполагаю, что кадры) либо все в режиме IE9, либо все меньше, чем режим IE9. Нельзя смешивать кадры IE9 с < Кадры IE9, см. Проблемы MS # 599022 и # 635648.

Изменить 2:

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

Изменить 3:

Изменить 4:

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

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

Ответ 2

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

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

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

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

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

Причина, почему использование CCs вокруг мета не будет работать, заключается в том, что браузер должен был выбрать механизм рендеринга к тому времени, когда он попадет в 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

Я до сих пор использовал все это, ничего не работает на 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. Что так сложно в поддержке того, что вы говорите, должно работать в вашей документации? мы должны тратить часы на военные войны. Вы тратите время на все.

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

<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 отображает веб-страница в стандартном режиме IE9s:"

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

Ответ 7

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

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

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