Comment détecter IE11?

quand je veux détecter IE j'utilise ce code:

function getInternetExplorerVersion()
{
  var rv = -1;
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp. );
  }
  return rv;
}
function checkVersion()
{
  var msg = "You're not using Internet Explorer.";
  var ver = getInternetExplorerVersion();

  if ( ver > -1 )
  {
    msg = "You are using IE " + ver;
  }
  alert( msg );
}

mais IE11 retourne "You're not using Internet Explorer". Comment puis-je détecter?

194
demandé sur Paul Sweatte 2013-07-28 14:49:00

15 réponses

IE11 ne déclare plus MSIE , selon cette liste de modifications c'est intentionnel pour éviter la détection erronée.

Ce que vous pouvez faire si vous vraiment veulent savoir c'est IE est de détecter le Trident/ chaîne de l'agent utilisateur si navigator.appName renvoie Netscape , quelque chose comme (non testé);

function getInternetExplorerVersion()
{
  var rv = -1;
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp. );
  }
  else if (navigator.appName == 'Netscape')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp. );
  }
  return rv;
}

console.log('IE version:', getInternetExplorerVersion());

notez que IE11 (afaik) est toujours en aperçu, et l'agent utilisateur peut changer avant la sortie.

205
répondu Joachim Isaksson 2018-05-03 13:21:05

utiliser !(window.ActiveXObject) && "ActiveXObject" in window pour détecter IE11 explicitement.

pour détecter toute version IE (pre-Edge," Trident"), utilisez "ActiveXObject" in window à la place.

79
répondu mcw0933 2016-04-11 15:28:59

utiliser MSInputMethodContext dans le cadre d'un contrôle de détection de caractéristique. Par exemple:

//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;

Références

33
répondu Paul Sweatte 2017-06-27 14:04:14

j'ai lu vos réponses et j'ai fait un mélange. Il semble fonctionner avec Windows XP(IE7/IE8) et Windows 7 (IE9/IE10/IE11).

function ie_ver(){  
    var iev=0;
    var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
    var trident = !!navigator.userAgent.match(/Trident\/7.0/);
    var rv=navigator.userAgent.indexOf("rv:11.0");

    if (ieold) iev=new Number(RegExp.);
    if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
    if (trident&&rv!=-1) iev=11;

    return iev;         
}

bien sûr si je retourne 0, signifie pas IE.

15
répondu Fabio 2013-12-29 12:48:42

Obtenir la Version de IE à partir de l'User-Agent

var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}

Comment cela fonctionne: La chaîne de l'agent utilisateur pour toutes les versions IE comprenant une partie "MSIE espace version " ou "Trident autre texte rv de l'espace-ou-virgule version ". Sachant cela, nous attrapons le numéro de version d'un String.match() expression régulière. Un bloc try-catch est utilisé pour raccourcir le code, sinon nous aurions besoin de tester les limites du tableau pour les navigateurs non-IE.

Note: l'utilisateur-agent peut être mystifié ou omis, parfois involontairement si l'Utilisateur a réglé son navigateur à un "mode de compatibilité". Bien que cela ne semble pas être un problème dans la pratique.


Obtenir la Version de IE sans le User-Agent

var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 : 
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 : 
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );

comment ça marche: chaque version D'IE ajoute le support pour caractéristiques supplémentaires non trouvé dans les versions précédentes. Nous pouvons donc tester les caractéristiques de manière descendante. Une séquence ternaire est utilisée ici par souci de brièveté, bien que les énoncés if-then et switch fonctionneraient tout aussi bien. La variable ie est définie à un entier 5-11, ou 1 pour l'ancien, ou 99 pour le nouveau/non-IE. Vous pouvez définir à 0 si vous voulez juste tester pour IE 1-11 exactement.

Note: la détection D'objet peut casser si votre code est exécuté sur une page avec des scripts tiers qui ajoutent des polyfills pour des choses comme document.addEventListener . Dans de telles situations, l'agent-utilisateur est la meilleure option.


Détecter si le Navigateur est Moderne

si vous êtes seulement intéressé à savoir si un navigateur prend en charge la plupart des HTML 5 et les normes CSS 3, vous pouvez raisonnablement supposer QU'IE 8 et inférieur restent le problème principal apps. Tester pour window.getComputedStyle vous donnera un assez bon mélange de navigateurs modernes, ainsi (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 améliore considérablement la prise en charge des standards, mais L'animation natif CSS nécessite IE 10.

var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) ); 
11
répondu Beejor 2015-08-27 18:37:17

Angulaire JS fait de cette façon.

msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
  msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}

msie sera un nombre positif si son IE et NaN pour les autres navigateurs comme chrome,firefox.

pourquoi ?

depuis Internet Explorer 11, la chaîne de caractères utilisateur-agent a considérablement changé.

reportez-vous ceci :

msdn #1 msdn #2

8
répondu Vishal Sharma 2014-08-25 18:10:58

solution:

function GetIEVersion() {
  var sAgent = window.navigator.userAgent;
  var Idx = sAgent.indexOf("MSIE");
  // If IE, return version number.
  if (Idx > 0)
    return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));

  // If IE 11 then look for Updated user agent string.
  else if (!!navigator.userAgent.match(/Trident\/7\./))
    return 11;

  else
    return 0; //It is not IE

}
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){
  alert("This is IE " + GetIEVersion());
}else {
  alert("This no is IE ");
}		
7
répondu coperniko 2015-09-11 05:59:04

j'utilise une méthode plus simple:

l'objet global navigator a une propriété touchpoints, dans Internet Exlorer 11 est appelé msMaxTouchPoints tho.

donc si vous cherchez:

navigator.msMaxTouchPoints !== void 0 

vous trouverez Internet Explorer 11.

3
répondu Dvid Silva 2014-06-23 01:39:59
var ua = navigator.userAgent.toString().toLowerCase();
var match = /(trident)(?:.*rv:([\w.]+))?/.exec(ua) ||/(msie) ([\w.]+)/.exec(ua)||['',null,-1];
var rv = match[2];
return rv;
2
répondu areschen 2013-08-12 01:18:23

Essayez Ceci:

var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var net = !!navigator.userAgent.match(/.NET4.0E/);
var IE11 = trident && net
var IEold = ( navigator.userAgent.match(/MSIE/i) ? true : false );
if(IE11 || IEold){
alert("IE")
}else{
alert("Other")
}
2
répondu Krunal 2013-10-24 10:55:48

Cela semble être une meilleure méthode. "indexOf" renvoie -1 si rien ne correspond. Il n'écrase pas les classes existantes sur le corps, il les ajoute simplement.

// add a class on the body ie IE 10/11
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
    document.body.className = document.body.className+' ie11';
}
if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
    document.body.className = document.body.className+' ie10';
}
1
répondu joe 2014-07-16 09:45:55

détecter la plupart des navigateurs avec ce:

var getBrowser = function(){
  var navigatorObj = navigator.appName,
      userAgentObj = navigator.userAgent,
      matchVersion;
  var match = userAgentObj.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
  if( match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) match[2] = matchVersion[1];
  //mobile
  if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
    return match ? [match[1], match[2], mobile] : [navigatorObj, navigator.appVersion, mobile];
  }
  // web browser
  return match ? [match[1], match[2]] : [navigatorObj, navigator.appVersion, '-?'];
};

https://gist.github.com/earlonrails/5266945

0
répondu earlonrails 2014-10-02 20:44:31

j'ai utilisé l'événement onscroll à l'élément avec la barre de défilement. Lors du déclenchement dans IE, j'ai ajouté la validation suivante:

onscroll="if (document.activeElement==this) ignoreHideOptions()"
0
répondu Martin 2015-04-08 13:59:09

Uniquement pour le Navigateur IE:

var ie = 'NotIE'; //IE5-11, Edge+
    if( !!document.compatMode ) {
        if( !("ActiveXObject" in window) ) ) ie = 'EDGE';
        if( !!document.uniqueID){
            if('ActiveXObject' in window && !window.createPopup ){ ie = 11; }
            else if(!!document.all){
                    if(!!window.atob){ie = 10;}
                    else if(!!document.addEventListener) {ie = 9;}
                    else if(!!document.querySelector){ie = 8;}
                    else if(!!window.XMLHttpRequest){ie = 7;}
                    else if(!!document.compatMode){ie = 6;}
                    else ie = 5;
                }
        }
    }

utilisation de l'alerte(ie);

Test:

var browserVersionExplorer = (function() {
    var ie = '<s>NotIE</s>',
        me = '<s>NotIE</s>';

    if (/msie\s|trident\/|edge\//i.test(window.navigator.userAgent) && !!(document.documentMode || document.uniqueID || window.ActiveXObject || window.MSInputMethodContext)) {
            if (!!window.MSInputMethodContext) {
                ie = !("ActiveXObject" in window) ? 'EDGE' : 11;
            } else if (!!document.uniqueID) {
                if (!!(window.ActiveXObject && document.all)) {
                    if (document.compatMode == "CSS1Compat" && !!window.DOMParser ) {
                        ie = !!window.XMLHttpRequest ? 7 : 6;
                    } else {
                        ie = !!(window.createPopup && document.getElementById) ? parseFloat('5.5') : 5;
                    }
                    if (!!document.documentMode && !!document.querySelector ) {
                        ie = !!(window.atob && window.matchMedia) ? 10 : ( !!document.addEventListener ? 9 : 8);
                    }
                } else ie = !!document.all ? 4 : (!!window.navigator ? 3 : 2);
            }
        }
        
    return ie > 1 ? 'IE ' + ie : ie;
})();

 alert(browserVersionExplorer);

Mise À Jour 01 Juin 2017

maintenant nous pourrions utiliser quelque chose de plus facile et plus simple:

var uA = window.navigator.userAgent,
    onlyIEorEdge = /msie\s|trident\/|edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
    checkVersion = (onlyIEorEdge && +(/(edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
0
répondu James Peter 2017-06-01 14:15:46

très franchement, je dirais d'utiliser une bibliothèque qui fait ce dont vous avez besoin (comme plate-forme.js par exemple). À un certain moment, les choses changeront et la bibliothèque sera équipée pour ces changements et l'analyse manuelle utilisant des expressions régulières échouera.

Dieu merci, IE s'en va...

0
répondu Matthias Hryniszak 2018-01-14 22:06:49