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
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();
});
обнаружение и предупреждения, ваши первые и последние линии защиты от ада совместимости.