77 votes

La meilleure façon de vérifier pour IE moins de 9 en JavaScript sans bibliothèque

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?

118voto

Mike Lewis Points 29305

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

99voto

vector Points 3513

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.

27voto

Yahel Points 21516

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}

10voto

zyklus Points 31683

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.

9voto

execution Points 136

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;
})();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X