web-dev-qa-db-fra.com

Comment détecter Internet Explorer (IE) et Microsoft Edge à l'aide de JavaScript?

J'ai beaucoup regardé autour de moi et j'ai cru comprendre qu'il y avait beaucoup de façons de détecter Internet Explorer.

Mon problème est le suivant: mon document HTML contient une zone qui appelle une fonction JavaScript incompatible avec Internet Explorer, quelle qu'elle soit. Je souhaite détecter si IE est utilisé et, dans l'affirmative, définissez la variable sur true.

Le problème, c’est que j’écris mon code avec Notepad ++ et que, lorsque j’exécute le code HTML dans un navigateur, aucune des méthodes de détection de IE ne fonctionne. Je pense que le problème est que je l’utilise sous Notepad ++. Je dois être capable de détecter IE, afin de pouvoir désactiver cette zone du site en fonction de la variable. J'ai essayé ceci:

var isIE10 = false;

if (navigator.userAgent.indexOf("MSIE 10") > -1) {
    // this is internet Explorer 10
    isIE10 = true;
   window.alert(isIE10);
}

var isIE = (navigator.userAgent.indexOf("MSIE") != -1);

if(isIE){
    if(!isIE10){
    window.location = 'pages/core/ie.htm';
    }
}

mais ça ne marche pas. Comment détecter IE dans Notepad ++? C'est ce que je teste le code HTML, mais j'ai besoin d'une méthode qui fonctionnera avec cela.

modifier

J'ai remarqué que quelqu'un a marqué cela comme un doublon, et c'est compréhensible. Je suppose que je n'étais pas clair. Je ne peux pas utiliser de réponse JQuery. Ce n'est donc pas un doublon, je demande une réponse JS de Vanilla.

Modifier # 2

Existe-t-il également un moyen de détecter le navigateur Microsoft Edge?

68
user5171952

Je ne sais pas pourquoi, mais je ne vois pas le mot "Edge" dans l'agent utilisateur, comme tout le monde en parle, j'ai donc dû emprunter un autre chemin susceptible d'aider certaines personnes.

Au lieu de regarder navigator.userAgent, j'ai consulté navigator.appName pour savoir s'il s'agissait d'IE <= 10 ou d'IE11 et Edge. IE11 et Edge utilisent l'appName de "Netscape", tandis que toutes les autres itérations utilisent "Microsoft Internet Explorer".

Une fois que nous avons déterminé que le navigateur est IE11 ou Edge, j'ai ensuite consulté navigator.appVersion. J'ai remarqué que dans IE11, la chaîne était assez longue et contenait beaucoup d'informations. J'ai arbitrairement choisi le mot "Trident", qui ne figure certainement pas dans navigator.appVersion for Edge. Tester pour cette Parole m'a permis de distinguer les deux.

Vous trouverez ci-dessous une fonction qui renverra une valeur numérique indiquant le navigateur Internet Explorer utilisé. Si sur Microsoft Edge, le nombre 12 est renvoyé.

Bonne chance et j'espère que cela aide!

function Check_Version(){
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer'){

       var ua = navigator.userAgent,
           re  = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})");

       if (re.exec(ua) !== null){
         rv = parseFloat( RegExp.$1 );
       }
    }
    else if(navigator.appName == "Netscape"){                       
       /// in IE 11 the navigator.appVersion says 'trident'
       /// in Edge the navigator.appVersion does not say trident
       if(navigator.appVersion.indexOf('Trident') === -1) rv = 12;
       else rv = 11;
    }       

    return rv;          
}
27
skribbz14

Voici la dernière méthode correcte que je connaisse pour vérifier IE et Edge:

if (/MSIE 10/i.test(navigator.userAgent)) {
   // This is internet Explorer 10
   window.alert('isIE10');
}

if (/MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent)) {
    // This is internet Explorer 9 or 11
    window.location = 'pages/core/ie.htm';
}

if (/Edge\/\d./i.test(navigator.userAgent)){
   // This is Microsoft Edge
   window.alert('Microsoft Edge');
}

Notez que vous n'avez pas besoin de la variable supplémentaire isIE10 dans votre code car elle effectue maintenant des contrôles très spécifiques.

Consultez également cette page pour connaître les dernières chaînes IE et d'agent utilisateur Edge, car cette réponse risque de devenir obsolète à un moment donné: https://msdn.Microsoft.com/en-us/library/ hh869301% 28v = vs.85% 29.aspx

83
Sceptic
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
    ... do something
}

Explication:

document.documentMode

Une propriété IE uniquement, d'abord disponible dans IE8.

/Edge/

Une expression régulière pour rechercher la chaîne 'Edge' - que nous testons ensuite avec la propriété 'navigator.userAgent'

23
Chris Halcrow

J'utilise UAParser https://github.com/faisalman/ua-parser-js

var a = new UAParser();
var name = a.getResult().browser.name;
var version = a.getResult().browser.version;
14
Oren Gal

Le sujet est un peu ancien, mais comme les scripts ici détectent Firefox comme un faux positif (Edge v12), voici la version que j'utilise:

function isIEorEDGE(){
  if (navigator.appName == 'Microsoft Internet Explorer'){
    return true; // IE
  }
  else if(navigator.appName == "Netscape"){                       
     return navigator.appVersion.indexOf('Edge') > -1; // Edge
  }       

  return false;
}

qui peut bien sûr être écrit de manière plus concise:

function isIEorEDGE(){
  return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1);
}
11
GavinoGrifoni

Cette fonction a parfaitement fonctionné pour moi. Il détecte également Edge.

À l'origine de ce codepen:

https://codepen.io/gapcode/pen/vEJNZN

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // IE 10
  // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';

  // IE 11
  // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';

  // Edge 12 (Spartan)
  // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';

  // Edge 13
  // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';

  var msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var Edge = ua.indexOf('Edge/');
  if (Edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(Edge + 5, ua.indexOf('.', Edge)), 10);
  }

  // other browser
  return false;
}

Ensuite, vous pouvez utiliser if (detectIE()) { /* do IE stuff */ } dans votre code.

6
phocks

Si vous voulez juste donner aux utilisateurs qui utilisent un navigateur MS un avertissement ou quelque chose, ce code devrait être bon.

HTML:

<p id="IE">You are not using a Microsoft browser</p>

Javascript:

using_ms_browser = navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1) || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Trident') > -1);

if (using_ms_browser == true){
    document.getElementById('IE').innerHTML = "You are using a MS browser"
}

Merci à @GavinoGrifoni

5
patchie

Pour moi, mieux cela:

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;

Allez courir: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/

3
James Peter

Utilisez cette snip: var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;

2
Amin AmiriDarban

Voici une classe javascript qui détecte IE10, IE11 et Edge.
L’objet Navigator est injecté à des fins de test.

var DeviceHelper = function (_navigator) {
    this.navigator = _navigator || navigator;
};
DeviceHelper.prototype.isIE = function() {
    if(!this.navigator.userAgent) {
        return false;
    }

    var IE10 = Boolean(this.navigator.userAgent.match(/(MSIE)/i)),
        IE11 = Boolean(this.navigator.userAgent.match(/(Trident)/i));
    return IE10 || IE11;
};

DeviceHelper.prototype.isEdge = function() {
    return !!this.navigator.userAgent && this.navigator.userAgent.indexOf("Edge") > -1;
};

DeviceHelper.prototype.isMicrosoftBrowser = function() {
    return this.isEdge() || this.isIE();
};
0
Tomas Prado