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

81

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-Explorern jeglicher Art nicht kompatibel ist. Ich möchte erkennen, ob der IE verwendet wird, und wenn ja, die Variable auf true setzen.

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

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 funktioniert nicht. Wie kann ich IE aus Notepad ++ erkennen? Das ist es, woraus ich den HTML-Code teste, 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 war wohl nicht klar. Ich kann keine JQuery-Antwort verwenden, daher handelt es sich nicht um ein Duplikat, da ich nach einer Vanille-JS-Antwort frage.

Bearbeiten Sie # 2

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

Gemeinschaft
quelle
2
Es wird für Sie viel einfacher sein, den Code in IE und anderen Browsern zum Laufen zu bringen, anstatt IE-spezifischen Code zu schreiben.
Ibu
1
Wenn Sie Ihre Funktion nicht einfach so reparieren können, dass sie im IE funktioniert, wird die Funktionserkennung von den meisten als eine viel, viel bessere Möglichkeit zum Schreiben von Code angesehen als die Browsererkennung. Außerdem ist die Vorwärtskompatibilität viel besser, wenn sich die Browser ändern. Wissen Sie beispielsweise bereits, was Sie mit Edge, dem neuesten Browser von Microsoft, tun möchten?
jfriend00
1
Mögliches Duplikat von jQuery: Überprüfen Sie, ob der Benutzer den IE verwendet. Überprüfen Sie den Link. Es gibt viele Lösungen
num8er
Wenn eine der folgenden Antworten Ihre Frage beantwortet und die Funktionsweise dieser Website funktioniert, würden Sie die Antwort "akzeptieren", mehr hier: Was soll ich tun, wenn jemand meine Frage beantwortet ? Aber nur wenn Ihre Frage wirklich beantwortet wurde. Wenn nicht, sollten Sie der Frage weitere Details hinzufügen.
Baao
Ich habe meiner Antwort eine Kantenerkennung hinzugefügt und einen praktischen Link, über den Sie die neuesten Versionen sehen können.
Skeptiker

Antworten:

31

Ich weiß nicht warum, aber ich sehe "Edge" nicht im userAgent, wie es alle anderen sagen, 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 App-Namen "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 im navigator.appVersion for Edge enthalten ist. Durch Testen auf dieses Wort konnte ich die beiden unterscheiden.

Unten finden Sie eine Funktion, die einen numerischen Wert zurückgibt, für den der Benutzer den Internet Explorer verwendet. 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;          
}
skribbz14
quelle
7
Dies gibt 12 sowohl in Edge als auch in Firefox zurück.
Edencorbin
@edencorbin Ich habe unten eine Antwort gepostet, die sich um dieses Problem kümmert. stackoverflow.com/a/36688806/2304450
GavinoGrifoni
4
Das funktioniert nicht. In Chrome werden Opera, Firefox und (wahrscheinlich) Safari navigator.appName == "Netscape"als wahr ausgewertet.
Jack Giffin
2
DITTO. Schlägt auf Chrome, Opera, Firefox, Safari
BBaysinger
91

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 Überprüfungen durchführt.

Auf dieser Seite finden Sie auch die neuesten Zeichenfolgen für IE- und Edge-Benutzeragenten, da diese Antwort möglicherweise irgendwann veraltet ist: https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29. aspx

Skeptiker
quelle
2
FWIW, wenn ich navigator.userAgentmeine Win10 / Edge-VM einchecke, erhalte ich nur den ersten Teil davon, der die "Edge"Zeichenfolge nicht enthält .
Dave Newton
1
Welche Version von Edge verwenden Sie und können Sie sie hier veröffentlichen?
Skeptiker
Ich verwende VirtualBox 5.0.2 r 102096 und das Image heißt Microsoft Edge.Win10.For.Mac.VirtualBox.zip, das am Montag, den 27. August 2015 von der MS-Site heruntergeladen wurde. Auf dem Desktop-Hintergrund des Images steht Build 10240 , die Edge-Homepage sagt, ich bin auf dem "neuesten Build dieser VM, 20150801 ", der in den Einstellungen als 20.10240.16384.0 angezeigt wird .
Dave Newton
Danke und der navigator.userAgent String?
Skeptiker
1
Es wird als "Mozilla / 5.0 (Windows NT 10.0; Win64; x64)" anstelle der vollständigen Zeichenfolge zurückgegeben. IIRC Ich habe eine weitere SO-Frage zum VM / Image-Problem gefunden.
Dave Newton
36
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
    ... do something
}

Erläuterung:

document.documentMode

Eine Eigenschaft nur für IE, die zuerst in IE8 verfügbar ist.

/Edge/

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

Update März 2020

@Jam kommentiert, dass die neueste Version von Edge jetzt Edgals Benutzeragent gemeldet wird. Der Scheck wäre also:

if (document.documentMode || /Edge/.test(navigator.userAgent) || /Edg/.test(navigator.userAgent)) {
    ... do something
}
Chris Halcrow
quelle
2
Dies ist die einzige Seite, die für mich sowohl im IE als auch im Edge funktioniert.
Meloman
1
/Edge\//.test(navigator.userAgent) Um robuster zu werden, bevorzuge ich den Backslash.
JJ
1
In der neuesten Version von Edge ist es nur Edg im Benutzeragenten. Um also auf IE, Edge und Edge-Chrom zu testen und den Schrägstrich einzuschließen:document.documentMode || /Edge\//.test(navigator.userAgent) || /Edg\//.test(navigator.userAgent)
Jam
Ich nehme an, Sie müssen Edge nicht mit der UA-Zeichenfolge "Edg" erkennen, da es auf Chrom basiert und wahrscheinlich nicht erkannt werden wollte (im Gegensatz zu EdgeHTML)
Andrey,
15

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;
Oren Gal
quelle
2
Im Allgemeinen ist die Funktionserkennung besser als die Browsererkennung. Das heißt, wenn Sie wirklich einen Browser erkennen müssen, würde ich eine Bibliothek verwenden (wie hier vorgeschlagen). Das Parsen von Zeichenfolgen von Benutzeragenten ist sehr kompliziert. Eine Bibliothek verringert das Risiko eines Fehlers.
Sandstrom
Sehr hilfreich, keine der anderen Lösungen hat funktioniert, dieses Plugin hat perfekt für mich funktioniert.
Edencorbin
11

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

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

  return false;
}

was natürlich prägnanter geschrieben werden kann:

function isIEorEDGE(){
  return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.userAgent.indexOf('.NET') > -1);
}
GavinoGrifoni
quelle
gibt falsch für Rand zurück
Cream Whipped Airplane
@CreamWhippedAirplane können Sie hier das Ergebnis von navigator.appName veröffentlichen, das von Ihrer Edge-Version angegeben wurde? Vielleicht haben sie es kürzlich geändert
GavinoGrifoni
@CreamWhippedAirplane scheint sich geändert zu haben navigator.appVersion: Jetzt enthält es nicht mehr "Trident", sondern sie fügen dem Namen "Edge" hinzu. Aktualisiere meine Antwort jetzt!
GavinoGrifoni
Dies hat bei Tests auf browsererstack.com nicht funktioniert. Ich weiß nicht, ob es auf einem echten Computer funktioniert! Aber auf Browserstack bekam ich Netscapeals appName ...
Betty St
4
Schlägt für IE 11 fehl. IE 11 gibt nur 'Netscape' als App-Namen an, wodurch die Bedingung nicht erfüllt wird
Ankur Aggarwal
8

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.

Phocks
quelle
Dies funktionierte für mich im Jahr 2019. Andere Lösungen auf dieser Seite gaben falsch positiv für Firefox oder sogar falsch negativ für IE 11.
Melissa Freeman
6

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

Patchie
quelle
3

Für mich besser das:

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;

Gehen Sie los: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/

James Peter
quelle
2

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

Amin AmiriDarban
quelle
3
Dies funktionierte am besten für mich, obwohl die ternäre Operation überflüssig ist. navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1wird als wahr oder falsch ausgewertet, sodass Sie das einfach zurückgeben / verwenden können.
Kolby
2

Ein Zeilencode zur Erkennung des Browsers.

Wenn der Browser IE oder Edge ist, wird true zurückgegeben.

let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)
shulha yahya
quelle
0

Hier ist eine Javascript-Klasse, die IE10, IE11 und Edge erkennt.
Das Navigatorobjekt 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();
};
Tomas Prado
quelle
0

Wenn wir Edge überprüfen müssen, gehen Sie bitte damit um

if (navigator.userAgent.indexOf ("Edge")> 1) {

//do something

}}

prasanth pr
quelle
-4

Erstens ist es sicher nicht das Notepad ++ Problem. Es ist Ihr " String Matching Problem "

Die gemeinsame Zeichenfolge in allen IE-Versionen lautet MSIE. Überprüfen Sie die verschiedenen userAgent-Zeichenfolgen unter http://www.useragentstring.com/pages/Internet%20Explorer/.

if(navigator.userAgent.indexOf("MSIE") != -1){
   alert('I am Internet Explorer!!');
}
Amit Prabhu Parrikar
quelle
versucht dies, es funktioniert nicht. Ich habe den Code von Notepad ++ im IE ausgeführt, und es gab keine Warnung. Ich habe die Debugger-Konsole überprüft und es gab keine Fehler. Ich verwende Windows 7 und bin mir nicht sicher, ob sich dies auf die Version von IE
Welche IE-Version verwenden Sie?
Amit Prabhu Parrikar