web-dev-qa-db-de.com

Wie kann ich Internet Explorer (IE) und Microsoft Edge mithilfe von JavaScript erkennen?

Ich habe mich viel umgesehen und verstehe, dass es viele Möglichkeiten gibt, den Internet Explorer zu erkennen.

Mein Problem ist folgendes: Ich habe einen Bereich in meinem HTML-Dokument, der beim Klicken eine JavaScript-Funktion aufruft, die mit Internet Explorer jeglicher Art nicht kompatibel ist. Ich möchte erkennen, ob IE verwendet wird, und in diesem Fall die Variable auf true setzen.

Das Problem ist, ich schreibe meinen Code aus Notepad ++ heraus, und wenn ich den HTML-Code im Browser ausführe, funktioniert keine der Methoden zum Erkennen von IE). Ich denke, das Problem ist, dass ich aktiv bin Ich muss in der Lage sein, den IE zu erkennen, damit ich den Bereich der Site basierend auf der Variablen deaktivieren kann.

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';
    }
}

aber es geht nicht. Wie kann ich IE out of Notepad ++? Daraus teste ich den HTML-Code, aber ich brauche eine Methode, die damit funktioniert.

bearbeiten

Mir ist aufgefallen, dass jemand dies als Duplikat markiert hat, und das ist verständlich. Ich nehme an, ich war nicht klar. Ich kann keine JQuery-Antwort verwenden, daher ist dies kein Duplikat, da ich nach einer Vanilla JS-Antwort frage.

Bearbeiten Sie # 2

Gibt es auch eine Möglichkeit, den Microsoft Edge-Browser zu erkennen?

68
user5171952

Ich weiß nicht warum, aber ich sehe im userAgent nicht "Edge", von dem alle reden, also musste ich einen anderen Weg einschlagen, der einigen Leuten helfen könnte.

Anstatt auf navigator.userAgent zu schauen, habe ich auf navigator.appName geschaut, um zu unterscheiden, ob es sich um IE <= 10 oder IE11 und Edge handelt. IE11 und Edge verwenden den appName von "Netscape", während jede andere Iteration "Microsoft Internet Explorer" verwendet.

Nachdem wir festgestellt haben, dass der Browser entweder IE11 oder Edge ist, habe ich nach navigator.appVersion gesucht. Mir ist aufgefallen, dass die Zeichenfolge in IE11 ziemlich lang war und viele Informationen enthielt. Ich habe willkürlich das Wort "Trident" ausgewählt, das definitiv nicht in der navigator.appVersion für Edge enthalten ist. Das Testen auf dieses Wort erlaubte mir, die beiden zu unterscheiden.

Nachstehend finden Sie eine Funktion, die einen numerischen Wert für den Internet Explorer zurückgibt, in dem sich der Benutzer befindet. Bei Microsoft Edge wird die Nummer 12 zurückgegeben.

Viel Glück und ich hoffe das hilft!

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

Hier ist die neueste korrekte Methode, mit der ich nach IE und Edge suchen kann:

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

Beachten Sie, dass Sie die zusätzliche Variable isIE10 in Ihrem Code nicht benötigen, da sie jetzt sehr spezifische Prüfungen durchführt.

Lesen Sie auf dieser Seite auch die neuesten IE und Edge User Agent-Zeichenfolgen, da diese Antwort möglicherweise irgendwann veraltet ist: 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
}

Erläuterung:

document.documentMode

Eine IE only-Eigenschaft, die zuerst in IE8 verfügbar ist.

/Edge/

Ein regulärer Ausdruck zur Suche nach der Zeichenfolge 'Edge', die wir dann anhand der Eigenschaft 'navigator.userAgent' testen

23
Chris Halcrow

Ich verwende 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

Das Thema ist etwas alt, aber da die Skripte hier Firefox als falsch positiv erkennen (Edge v12), verwende ich die folgende Version:

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

was natürlich übersichtlicher geschrieben werden kann:

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

Diese Funktion hat bei mir perfekt funktioniert. Es erkennt auch Edge.

Ursprünglich aus diesem 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;
}

Dann können Sie if (detectIE()) { /* do IE stuff */ } in Ihrem Code verwenden.

6
phocks

Wenn Sie Benutzern, die einen MS-Browser verwenden, nur eine Warnung oder Ähnliches geben möchten, sollte dieser Code gut sein.

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"
}

Vielen Dank an @GavinoGrifoni

5
patchie

Für mich ist das besser:

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;

Führen Sie Folgendes aus: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/

3
James Peter

Benutze diesen Snip: var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;

2

Hier ist eine Javascript-Klasse, die IE10, IE11 und Edge erkennt.
Das Navigator-Objekt wird zu Testzwecken injiziert.

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