Quel serait votre plus rapide, le plus court (le meilleur) moyen de détecter le navigateur IE et la version à moins de 9 en JavaScript, sans l'aide de jQuery ou un add-on des bibliothèques?
Réponses
Trop de publicités?Javascript
var ie = (function(){
var undef,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : undef;
}());
Vous pouvez alors faire:
ie < 9
Par James Panolsey à partir d'ici: http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments
pour ce que ça vaut:
if( document.addEventListener ){
alert("you got IE9 or greater");
}
Ce succès cibles IE 9+, car l' addEventListener
méthode a été pris en charge très tôt, pour tous les principaux navigateurs, mais IE. (Chrome, Firefox, Opera, et Safari) MDN de Référence. Il est pris en charge actuellement dans IE9 et nous pouvons nous attendre à continuer à être pris en charge ici.
Utiliser les commentaires conditionnels, vous pouvez créer un bloc de script qui ne pourront qu'être exécuté dans IE inférieur à 9.
<!--[if lt IE 9 ]>
<script>
var is_ie_lt9 = true;
</script>
<![endif]-->
Bien sûr, vous pouvez faire précéder ce bloc universel bloc qui déclare var is_ie_lt9=false
, ce qui permettrait de remplacer pour IE moins de 9. (Dans ce cas, vous souhaitez supprimer l' var
déclaration, comme il serait répétitif).
EDIT: Voici une version qui ne repose pas sur des blocs de script en ligne (peut être exécuté à partir d'un fichier externe), mais ne l'utilisez pas l'utilisateur de l'agent sniffer:
Via @cowboy:
with(document.createElement("b")){id=4;while(innerHTML="<!--[if gt IE "+ ++id+"]>1<![endif]-->",innerHTML>0);var ie=id>5?+id:0}
bah pour les commentaires conditionnels! Code conditionnel tous les sens!!! (idiot IE)
<script type="text/javascript">
/*@cc_on
var IE_LT_9 = (@_jscript_version < 9);
@*/
</script>
Sérieusement, juste de lancer ceci, au cas où cela vous convient le mieux... ils sont la même chose, cela peut tout simplement être dans un .fichier js au lieu de inline HTML
Remarque: il est tout à fait une coïncidence que le jscript_version contrôle est "9" ici. Le paramètre 8, 7, etc ne seront PAS vérifier "est IE8", vous auriez besoin pour la recherche de l'jscript versions de ces navigateurs.
Ci-dessous est une amélioration par rapport à James Padolsey de la solution:
1) de ne pas polluer la mémoire (James extrait crée 7 unremoved les fragments de document lors de la détection d'IE11, par exemple).
2) C'est plus rapide car il vérifie la documentMode valeur avant de générer le balisage.
3) C'est bien plus lisible, surtout au début des développeurs JavaScript.
Gist lien: https://gist.github.com/julianshapiro/9098609
/*
- Behavior: For IE8+, we detect the documentMode value provided by Microsoft.
- Behavior: For <IE8, we inject conditional comments until we detect a match.
- Results: In IE, the version is returned. In other browsers, false is returned.
- Tip: To check for a range of IE versions, use if (!IE || IE < MAX_VERSION)...
*/
var IE = (function() {
if (document.documentMode) {
return document.documentMode;
} else {
for (var i = 7; i > 0; i--) {
var div = document.createElement("div");
div.innerHTML = "<!--[if IE " + i + "]><span></span><![endif]-->";
if (div.getElementsByTagName("span").length) {
return i;
}
}
}
return undefined;
})();