quelqu'un sait-il comment vérifier si le mode de compatibilité IE 11 est activé lorsque je suis sur un site Web via javascript?
J'ai ajouté l'URL aux paramètres d'affichage de compatibilité de la liste. Mais quand je fais
navigator.userAgent
dans les outils de développement, il revient
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) comme Gecko
En regardant le site Web de Microsoft ( http://msdn.Microsoft.com/en-us/library/ie/hh869301 (v = vs.85) .aspx ), il est dit
Les jetons compatibles ("compatible") et navigateur ("MSIE") ont été supprimés.
Toute aide pour détecter si une page utilise la vue de compatibilité via javascript serait vraiment utile. Merci d'avance.
[~ # ~] résolu [~ # ~]
En cherchant moi-même une réponse à cette question, j'ai trouvé cette solution de Nenad Bulatovic dans un autre fil, mais sa réponse n'a pas été marquée comme la bonne réponse. J'ai testé cela dans IE11 et rétrogradé vers IE5 et j'ai constaté que cela fonctionne pour IE7-IE11, ce qui est génial. Je voulais le partager ici au cas où quelqu'un d'autre le trouverait utile.
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>
J'ai écrit une fonction JavaScript, ie-vérité , pour faire exactement cela. Comment cela fonctionne est que dans IE 11 si le mode de compatibilité est activé, la chaîne de l'agent utilisateur contiendra le numéro de version Trident pour IE 11 (7.0) as ainsi que le numéro de version MSIE pour une ancienne version de IE (comme 7.0 pour IE 7). Cela s'applique également au mode de compatibilité dans les anciennes versions d'IE .
Ajoutez-le au fichier web.config et l'application remplacera les paramètres de l'utilisateur.
<configuration>
...
<system.webServer>
...
<httpProtocol>
<customHeaders>
<clear/>
<add name="X-UA-Compatible" value="IE=8; IE=9; IE=Edge" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
...
</configuration>
Placez la balise "system.webServer" à la fin de votre fichier web.config juste avant la balise de fermeture "configuration". De plus, vous pouvez ajouter la balise compatible X-UA dans IIS sur votre serveur Web en sélectionnant votre site Web et en cliquant sur l'icône En-têtes de réponse HTTP.
Je recommanderais d'utiliser la détection de fonctionnalités plutôt que d'interroger indirectement la version du navigateur. Ainsi, par exemple, si vous avez besoin de la fonctionnalité API d'historique HTML 5, faites quelque chose comme:
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 ...');
}
Une solution simple, essayez-la dans la console:
if (typeof(window.getSelection) == "undefined") {
alert("Unsupported browser!");
} else {
alert("Supported browser");
}
Détectera tout IE inférieur à IE9 (y compris la vue de compatibilité). Détecterait également Chrome 4-14 selon caniuse.
IE 6-8: prend en charge les événements de sélection, mais pas window.getSelection () Ref: https://caniuse.com/#feat=selection-api
Selon l'article agent utilisateur du livre de recettes de compatibilité IE , il existe un moyen de savoir si le mode compat est activé, mais uniquement lorsque la chaîne d'agent utilisateur coopère.
Plus précisément, si le jeton de navigateur indique MSIE 7.0
et le jeton Trident indique Trident/7.0
, c'est une indication assez claire. Pourtant, les modifications apportées à la chaîne UA depuis IE11 RTM montrent que vous ne pouvez pas - et ne devez pas - compter sur elle comme ressource prévisible dans les versions futures.
Pour en savoir plus sur les jetons individuels, consultez la rubrique Comprendre les chaînes d'agent utilisateur . (Ce n'est pas entièrement à jour, mais ce qui s'y trouve semble pertinent pour vos intérêts.)
J'espère que cela t'aides...
- Lance
Une solution fiable vous pouvez éditer qui fonctionne pour Internet Explorer 8 à 11 (nécessite du code supplémentaire pour prendre en charge <IE8).
Effets secondaires désagréables (uniquement si IE <11 ou documentMode <11 - aïe):
//@ sourceMappingURL=xx.js
(par exemple dans jQuery <1.11, ou dans d'autres bibliothèques qui n'ont pas été mises à jour vers la plus récente //#
format).La raison fondamentale pour laquelle cela fonctionne est que:
var ieRealVersion = Function('return /*@cc_on @_jscript_version@*/;')();
renvoie la version réelle de IE quel que soit le mode de compatibilité. Remarques: