Écriture du code conditionnel pour Internet Explorer DANS UN fichier Javascript

J'aimerais savoir s'il est possible d'écrire des javascript conditionnels dans un fichier javascript pour Internet Explorer.

C'est-à-dire quelque chose comme ça …

if (is IE7) { do this } else { do this instead }); 

Je sais que je peux charger un script complètement différent pour IE en utilisant des commentaires conditionnels dans la tête, mais je veux seulement changer un petit code, et le chargement d'une feuille complètement différente serait un moyen «coûteux» de le faire.

Si vous utilisez jquery votre code, faites ceci

 if ($.browser.msie && $.browser.version == '6.0') { //do IE specific code } 

Lors de l'écriture de Javascript, la détection des fonctionnalités est toujours le moyen d'aller au lieu de la détection du navigateur . Alors, au lieu de faire if (IE7) fait if (feature) .

Par exemple, si vous voulez savoir si votre navigateur supporte getElementsByClassName() , au lieu de vérifier la version du navigateur, vous vérifiez l'existence de la fonction ( if (document.getElementsByClassName) ).

Veuillez lire cet excellent article:

Détection d'objet sur Quirksmode

Si vous souhaitez savoir si le navigateur qui affiche votre page prend en charge certains objets que vous souhaitez utiliser dans votre code, vous ne devriez jamais utiliser une détection de navigateur. Bien sûr, vous savez que ce navigateur et ce navigateur prendront en charge votre code alors que tel ou tel navigateur ne le fera pas. Mais qu'en est-il des autres navigateurs, des navigateurs obscurs?

Pas dans le fichier JavaScript directement.

Quelques alternatives seraient:

Utilisation d'une variable globale avant que le script ne soit chargé pour vérifier votre fichier JavaScript. C'est un peu une approche hybride et pourrait être désordonné , mais la détection IE est garantie.

 <!--[if IE]> <script type="text/javascript"> var is_ie = true; </script> <![endif]--> <script type="text/javascript" src="somefile.js"></script> 

Ou, une approche plus traditionnelle utilisant la détection de navigateur ou d' objet dans le fichier JavaScript.

La compilation conditionnelle est exactement ce que vous recherchez.

 <script> /*@cc_on @if (@_jscript_version == 5.7 && window.XMLHttpRequest) document.write("You are using IE7"); @end @*/ </script> 

Mon script go-to est le script BrowserDetect de PPK. C'est léger, facilement compréhensible et ne nécessite pas d'utiliser une bibliothèque. Lorsqu'il est chargé, vous pouvez écrire un code comme:

 if (BrowserDetect.browser == "Explorer" && BrowserDetect.version >= 6 && BrowserDetect.version <= 8) { // IE6-8 code { 

Bien sûr, vous devriez éviter d'utiliser ce coût (raisonnable), mais il y a des moments où il est plus propre à mettre en quarantaine le code spécifique à IE plutôt que d'essayer de pirater les fonctions et les bugs spécifiques à IE.

Bien qu'il s'agisse d'une réponse à la question initiale, ce n'est pas ce que vous devez faire. Alors ne le faites pas!

Pourquoi ne pas déterminer quel navigateur vous utilisez et stocker cela dans une variable en javascript. Ensuite, vous pouvez avoir si statemenets et similaires dans votre javascript. Par exemple, si je suis IE, faites ceci, sinon faites cela. Vous avez l'idée!

Avez-vous vu cette? Refuges du navigateur

Le bit principal:

 var is = { ff: window.globalStorage, ie: document.all && !window.opera, ie6: !window.XMLHttpRequest, ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera, ie8: document.documentMode==8, opera: Boolean(window.opera), chrome: Boolean(window.chrome), safari: window.getComputedStyle && !window.globalStorage && !window.opera } 

Si vous souhaitez utiliser jquery, il a détecté un navigateur intégré.

http://api.jquery.com/jQuery.browser/