IE11 определяет, включен ли режим совместимости через javascript
Кто-нибудь знает, как проверить, включен ли режим совместимости IE 11, когда я нахожусь на сайте через javascript?
Я добавил URL-адрес в параметры просмотра совместимости списка. Но когда я делаю
navigator.userAgent
в инструментах разработчика, он возвращает
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0;.NET4.0E;.NET4.0C;.NET CLR 3.5.30729;.NET CLR 2.0.50727;.NET CLR 3.0.30729; InfoPath.3; rv: 11.0), как Gecko
Глядя на веб-сайт Microsoft (http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx), он говорит
Совместимые ( "совместимые" ) и браузерные ( "MSIE" ) токены удалены.
Любая помощь при обнаружении того, использует ли страница просмотр совместимости через javascript, будет действительно полезна. Спасибо заранее.
Ответы
Ответ 1
решаемые
Искав ответ на этот вопрос сам, я нашел это решение у Ненада Булатовича в другом потоке, но его ответ не был помечен как правильный ответ. Я тестировал это в IE11 и понижался до IE5 и обнаружил, что он работает для IE7-IE11, и это здорово. Я хотел бы поделиться им здесь, если кто-то найдет это полезным.
iecheck.js
function trueOrFalse() {
return true;
}
function IeVersion() {
//Set defaults
var value = {
IsIE: false,
TrueVersion: 0,
ActingVersion: 0,
CompatibilityMode: false
};
//Try to find the Trident version number
var trident = navigator.userAgent.match(/Trident\/(\d+)/);
if (trident) {
value.IsIE = true;
//Convert from the Trident version number to the IE version number
value.TrueVersion = parseInt(trident[1], 10) + 4;
}
//Try to find the MSIE number
var msie = navigator.userAgent.match(/MSIE (\d+)/);
if (msie) {
value.IsIE = true;
//Find the IE version number from the user agent string
value.ActingVersion = parseInt(msie[1]);
} else {
//Must be IE 11 in "edge" mode
value.ActingVersion = value.TrueVersion;
}
//If we have both a Trident and MSIE version number, see if they're different
if (value.IsIE && value.TrueVersion > 0 && value.ActingVersion > 0) {
//In compatibility mode if the trident number doesn't match up with the MSIE number
value.CompatibilityMode = value.TrueVersion != value.ActingVersion;
}
return value;
}
iecheck.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testing IE Compatibility Mode</title>
<script src="iecheck.js" type="text/javascript"></script>
</head>
<body>
<div id="results">Results: </div>
</br>
<script type="text/javascript">
var ie = IeVersion();
document.write("IsIE: " + ie.IsIE + "</br>");
document.write("TrueVersion: " + ie.TrueVersion + "</br>");
document.write("ActingVersion: " + ie.ActingVersion + "</br>");
document.write("CompatibilityMode: " + ie.CompatibilityMode + "</br>");
</script>
</body>
</html>
source: Обнаружить режим совместимости с IE10
Ответ 2
Я написал функцию JavaScript, ie-truth, чтобы сделать именно это. Как это работает, в IE 11, если включен режим совместимости, строка User Agent будет содержать номер версии Trident для IE 11 (7.0), а также номер версии MSIE для более старой версии IE (например, 7.0 для IE 7). Это также относится к режиму совместимости в более старых версиях IE.
Ответ 3
Добавьте это в файл web.config, и приложение перезапишет пользовательские настройки.
<configuration>
...
<system.webServer>
...
<httpProtocol>
<customHeaders>
<clear/>
<add name="X-UA-Compatible" value="IE=8; IE=9; IE=EDGE" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
...
<configuration>
Ответ 4
Я бы рекомендовал использовать функцию обнаружения функций, а не косвенно запрашивать версию браузера. Так, например, если вам нужна функция API истории HTML 5, сделайте что-то вроде:
if (window.history && window.history.pushState) {
console.log('This is a SUPPORTED browser');
} else {
console.log('NO! You require a browser that does X, please try installing ...');
}
Ответ 5
В пользовательский агент статья Cookbook совместимости IE, вы можете сказать, что режим совместимости включен, но только при взаимодействии строки пользовательского агента.
В частности, если токен браузера говорит MSIE 7.0
, а токен Trident говорит Trident/7.0
, это довольно четкое указание. Тем не менее, изменения в строке UA после RTM от IE11 показывают, что вы не можете - и не должны - полагаться на нее как на предсказуемый ресурс в будущих версиях.
Чтобы узнать больше об отдельных токенах, см. раздел Понимание строк пользовательского агента. (Это не совсем актуально, но то, что кажется соответствующим вашим интересам).
Надеюсь, что это поможет...
- Лэнс
Ответ 6
A надежное решение вы можете edit, что работает для Internet Explorer с 8 по 11 (требуется дополнительный код для поддержки < IE8).
Неприятные побочные эффекты (только если IE < 11 или documentMode < 11 - ouch):
- вызывает проблемы с помощью
//@ sourceMappingURL=xx.js
(например, в jQuery < 1.11 или других библиотеках, которые не обновлены до более поздней версии //#
).
- По-видимому @cc_on резко замедляет оценку js (re Paul Irish, который знает свои вещи).
Основная причина, по которой он работает, заключается в следующем:
var ieRealVersion = Function('return /*@cc_on @[email protected]*/;')();
возвращает реальную версию IE независимо от режима совместимости. Примечания:
- ieRealVersion undefined для IE11 в режиме IE11, но document.documentMode == 11 в этом случае.
- ieRealVersion - 5.8 для IE8.
- ieRealVersion - 5,7 для IE7, а также 5.7 для IE6 SP3. Однако documentMode undefined, поэтому вам нужен дополнительный код для обнаружения фактического браузера (довольно тривиальный, но я больше не поддерживаю IE6/7, поэтому я не удосужился его кодировать).
- Это надежный способ обнюхать Internet Explorer 6-10, который я использовал в течение многих лет без проблем (но это вызвало проблемы для других из-за @cc_on).