web-dev-qa-db-fra.com

Comment charger un script uniquement dans IE

J'ai besoin qu'un script particulier soit déclenché dans les navigateurs Internet Explorer uniquement!

J'ai essayé ceci:

<!--[if IE]> 
<script></script>
<![endif]-->

Malheureusement, cela empêche le chargement du script.

EDIT: Pour tous ceux qui demandent pourquoi j'ai besoin de ceci: IE rend le défilement extrêmement instable lors de l'utilisation de certaines animations. Afin de résoudre ce problème, je dois implémenter un script permettant un défilement fluide vers IE. Je ne veux pas l'appliquer à d'autres navigateurs, car ils n'en ont pas besoin et ce script, même s'il rend le défilement plus fluide, le rend également un peu artificiel.

21
David Martins

Je suis curieux de savoir pourquoi vous devez spécifiquement cibler les navigateurs IE, mais le code suivant devrait fonctionner si c'est vraiment ce que vous devez faire:

<script type="text/javascript">
    if(/MSIE \d|Trident.*rv:/.test(navigator.userAgent))
        document.write('<script src="somescript.js"><\/script>');
</script>

La première moitié de l'expression rationnelle (MSIE \d) sert à détecter Internet Explorer 10 et inférieur. La seconde moitié sert à détecter IE11 (Trident.*rv:).

Si la chaîne de l'agent utilisateur du navigateur correspond à ce modèle, il ajoutera somescript.js à la page.

50
nderscore

Si quelqu'un cherche toujours à exécuter du Javascript spécifique à IE, ce code fonctionne toujours dans les navigateurs IE (11) et non IE (Chrome, Firefox, Edge)

<script type="text/javascript">
    if(/MSIE \d|Trident.*rv:/.test(navigator.userAgent))
        document.write('<script src="../nolng/js/ex1IE.js"><\/script>
        <script src="../nolng/js/ex2IE.js"><\/script>');
    else
        document.write('<script src="../nolng/js/ex1.js"><\/script>
       <script src="../nolng/js/ex2.js"><\/script>');
</script>
3
Vikram

Vous pouvez modifier ce script pour exécuter votre code JavaScript spécifique à IE:

var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");

if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number
  alert('IE ' + parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
else alert('otherbrowser');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

2
Jaco

La détection de fonctionnalités est une meilleure approche - je vous recommande d’examiner Modernizr d’améliorer progressivement votre solution lorsque les périphériques/navigateurs sont capables de la prendre en charge.

Cette approche basée sur CSS fonctionne parfois aussi, en fonction de vos besoins.

Mettez ceci dans le <head>

<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class=""> <!--<![endif]-->

référence article - http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/

1

Vous pouvez utiliser javascript pour détecter IE et insérer votre script de manière dynamique:

var ua = window.navigator.userAgent;
if (ua.indexOf("MSIE ") != -1|| !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.setAttribute('src', 'YOUR_JS_SCRIPT.js');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('async', 'false');
    head.appendChild(script);
}

si vous pouvez utiliser jQuery, vous pouvez utiliser un code plus court:

if (ua.indexOf("MSIE ") != -1 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
    $.getScript('YOUR_JS_SCRIPT.js');
}

Solution trouvée dans ce message Vérifiez si l’utilisateur utilise IE avec jQuery

0
jcubic

currentScript est supporté dans tous les navigateurs outre IE

<script>
    // self-invoked wrapper for scoping the `document` variable
    !function( d ) {
        if( !d.currentScript ){
            var s = d.createElement( 'script' );
            s.src = 'ie.js';
            d.head.appendChild( s );
        }
    }(document)
</script>

Ce qui précède n’ajoute conditionnellement un fichier de script que pour les navigateurs IE.

0
vsync