JavaScript: могу ли я обнаружить IE9, если он находится в режиме совместимости IE7 или IE8?

Мне нужно знать, является ли браузер, идентифицирующий себя через строку агента пользователя как IE7 или IE8, действительно этими браузерами, или это IE9 в режиме совместимости 7 или 8.

из того, что я вижу в строке агента пользователя, IE9 в режиме совместимости IE7 предоставляет идентичную строку реальному IE7. Есть ли дополнительное свойство / элемент / объект, который я могу проверить, чтобы увидеть, действительно ли это замаскированный IE9?

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

Я надеюсь, что IE9 будет иметь некоторое свойство, которое существует и тестируется независимо от того, находится ли он в режиме 7, 8 или 9.


добавить...

хорошо, теперь я понимаю, где я ошибался. Я использовал раскрывающийся список "режим браузера" и переключил его на IE8 и IE7 и думал, что это "режим совместимости IE8" и " совместимость IE7 режим" соответственно. Это, конечно, неправда. Режим браузера инструментов разработчика действительно переключает его на "быть похожим" на эти старые браузеры, поэтому правильно, что будут сообщены исходные строки useragent.

Если я выйду из режима браузера в совместимости IE9 или IE9 и вместо этого попробую выпадающие варианты режима документа, то я действительно получу "Trident/5.0" во всех 8 комбинациях (два режима браузера и 4 режима документа). Мне просто нужно держаться подальше от выбора режима браузера IE7 и IE8, потому что они действительно (смоделированы) IE7 и IE8.

таким образом, страница, пользователь, не являющийся разработчиком, мета-тег или список совместимости Microsoft не смогут поместить IE9 в это неопознанное состояние.

просто используя if(navigator.userAgent.indexOf("Trident/5")>-1) будет достаточно.

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

Спасибо, что направили меня к ответу с вашими предложениями и ссылками.

7 ответов


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

представляем строку агента пользователя IE9:

похоже на IE8, совместимость с IE9 Посмотреть карту в режиме стандартов IE7, и строка UA IE9, когда в Вид совместимости будет:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)

в представлении совместимости отчеты IE9 себя как IE7 через приложение номер версии (Mozilla / 4.0) и маркер версии (MSIE 7.0). Это сделано за совместимость. увеличивается Токен трезубца, от 'Trident / 4.0' до 'Trident / 5.0', позволяет веб-сайтам различать IE9 работает в Представление Compat и IE8, работающие в Compat Вид.

(выделено мной). Таким образом, строка агента пользователя такая же, как и "Mozilla/4.0" и MSIE 7.0, но IE9 всегда будет Trident / 5.0 - независимо от того, говорит ли он MSIE 7.0, MSIE 8.0 или MSIE 9.0.

на самом деле, вы должны проверить эту большую подборку: строки идентификатора браузера (User-Agent) или даже лучше useragentstrings.com


document.documentMode - Это лучший способ для режим документов.


IE7 не содержит никакой информации о Trident

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0)

IE8 содержит эту строку:"Trident/4.0"

User-Agent : Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0)

IE9 содержит эту строку:"Trident/5.0"

IE9 в режиме совместимости:

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0; Trident/5.0)

IE9 в обычном режиме:

User-Agent : Mozilla/5.0 (compatible; MSIE 9.0; Trident/5.0)


Я надеюсь, что IE9 будет иметь некоторое свойство, которое существует и тестируется независимо от того, находится ли он в режиме 7, 8 или 9.

проверить, например,стиль.непрозрачность, он был представлен в IE9 и доступен независимо от режима совместимости:

<![if IE]> 
<script>
if(typeof document.documentElement.style.opacity!='undefined')
{
  //this must be at least IE9 
}
</script>
<![endif]>

иногда необходимо прочитать строку агента пользователя из переменной сервера, а не из объекта JavaScript navigator.

сравнить различия:

  • ASP classic,IE11

    • клиент javascript, навигатор.userAgent:"браузер Mozilla/5.0 (совместимый; MSIE 9.0 для Windows 6.1; WoW64 будет; и Trident/7.0; SLCC2; .ЧИСТАЯ СРЕДА CLR 2.0.50727; .ЧИСТАЯ СРЕДА CLR 3.5.30729; .Чистая среда CLR 3.0.30729; Медиа-Центр ПК 6.0; - ... NET4.0C; .NET4.0E; BOIE9; ENUS)"

    • сервер ASP, запрос.ServerVariables ("HTTP_USER_AGENT"):"Mozilla / 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; BOIE9; ENUS; rv: 11.0) как геккон"

  • ASP classic,режим совместимости IE11:

    • клиент javascript, навигатор.userAgent:"Mozilla / 5.0 (совместимый; MSIE 9.0; Windows NT 6.1; WOW64; Отель Trident/7.0; SLCC2; .ЧИСТАЯ СРЕДА CLR 2.0.50727; .ЧИСТАЯ СРЕДА CLR 3.5.30729; .Чистая среда CLR 3.0.30729; Медиа Центр PC 6.0; .Серии net4.0С; .Серии net4.0Е; BOIE9;ENUS))"

    • сервер ASP, запрос.ServerVariables ("HTTP_USER_AGENT"):"в Mozilla/4.0 (совместимый; MSIE 7.0 для Windows 6.1; WoW64 будет; и Trident/7.0; SLCC2; .ЧИСТАЯ СРЕДА CLR 2.0.50727; .ЧИСТАЯ СРЕДА CLR 3.5.30729; .Чистая среда CLR 3.0.30729; Медиа Центр PC 6.0; .Серии net4.0С; .Серии net4.0Е; BOIE9;ENUS)"


от https://stackoverflow.com/a/29288153/2879498

предполагая, что у вас есть скрытый элемент с идентификатором compat-warning:

Javascript w / jQuery:

$(function(){
    function showCompatWarning() {
        $('#compat-warning')
            .css('display','block')
            .css('height','auto')
            .show();
    }
    var tridentOffset = navigator.appVersion.indexOf('Trident/');
    if ( tridentOffset === -1 ) return;
    var jscriptVersion = 0;
    /*@cc_on @*/
    /*@if (@_jscript) jscriptVersion = @_jscript_version ; @*/;
    /*@end @*/
    var tridentVersion = parseInt(navigator.appVersion.substr(tridentOffset+8),10);
    var guessIEVersion = tridentVersion + 4;
    if (( document.documentMode && jscriptVersion && jscriptVersion < 10 && jscriptVersion !== document.documentMode ) ||
        ( document.compatMode && document.compatMode === 'BackCompat') ||
        ( document.documentMode && document.documentMode < 10 && document.documentMode != guessIEVersion ))
        showCompatWarning();
});

обнаружение и предупреждения, ваши первые и последние линии защиты от ада совместимости.