489 Stimmen

Überprüfen, ob der Benutzer IE verwendet

Ich rufe eine Funktion wie die folgende auf, indem ich auf Divs mit einer bestimmten Klasse klicke.

Gibt es eine Möglichkeit zu überprüfen, wenn die Funktion gestartet wird, ob ein Benutzer Internet Explorer verwendet und sie abzubrechen / abzubrechen, wenn sie andere Browser verwenden, sodass sie nur für IE-Benutzer ausgeführt wird? Die Benutzer hier wären alle auf IE8 oder höheren Versionen, sodass ich IE7 und ältere Versionen nicht abdecken müsste.

Wenn ich sagen könnte, welchen Browser sie verwenden, wäre das großartig, aber nicht erforderlich.

Beispiel Funktion:

$('.myClass').on('click', function(event)
{
    // meine Funktion
});

725voto

Mario Punkte 8243

Es sind mehrere Jahre vergangen und der Edge-Browser verwendet jetzt Chromium als Rendering-Engine.
Leider wird immer noch nach IE 11 gesucht.

Hier ist ein geradlinigerer Ansatz, da veraltete Versionen von IE verschwunden sein sollten.

if (window.document.documentMode) {
  // IE-Code ausführen
}

Hier ist meine alte Antwort (2014):

Im Edge hat sich der User-Agent-String geändert.

/**
 * Erkenne IEEdge
 * gibt die Version von IE/Edge oder false zurück, wenn der Browser kein Microsoft-Browser ist
 */
function detectIEEdge() {
    var ua = window.navigator.userAgent;

    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {
        // IE 10 oder älter => Versionsnummer zurückgeben
        return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
    }

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

    var edge = ua.indexOf('Edge/');
    if (edge > 0) {
       // Edge => Versionsnummer zurückgeben
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // anderer Browser
    return false;
}

Beispielverwendung:

alert('IEEdge ' + detectIEEdge());

Standardzeichenfolge von IE 10:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

Standardzeichenfolge von IE 11:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

Standardzeichenfolge von Edge 12:

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 

Standardzeichenfolge von Edge 13 (Dank an @DrCord):

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 

Standardzeichenfolge von Edge 14:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

Standardzeichenfolge von Edge 15:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063 

Standardzeichenfolge von Edge 16:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 

Standardzeichenfolge von Edge 17:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134 

Standardzeichenfolge von Edge 18 (Insider-Vorschau):

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730 

Testen bei CodePen:

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

528voto

SpiderCode Punkte 10062

Verwenden Sie die folgende JavaScript-Methode:

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

    if (msie > 0) // Wenn Internet Explorer, gib die Versionsnummer zurück
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else // Wenn ein anderer Browser, gib 0 zurück
    {
        alert('andererbrowser');
    }

    return false;
}

Sie finden die Details auf der folgenden Microsoft-Supportseite:

So bestimmen Sie die Browserversion aus einem Skript

Aktualisierung: (IE 11 Unterstützung)

function msieversion() {

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

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // Wenn Internet Explorer, gib die Versionsnummer zurück
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else // Wenn ein anderer Browser, gib 0 zurück
    {
        alert('andererbrowser');
    }

    return false;
}

165voto

Daniel Tonon Punkte 7885

Wenn Sie nur wissen möchten, ob der Browser der IE ist oder nicht, können Sie dies tun:

var isIE = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');

if ((old_ie > -1) || (new_ie > -1)) {
    isIE = true;
}

if ( isIE ) {
    //IE-spezifischer Code
}

Update 1: Eine bessere Methode

Ich empfehle dies jetzt. Es ist immer noch sehr lesbar und ist deutlich weniger Code :)

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  //IE-spezifischer Code
}

Danke an JohnnyFun in den Kommentaren für die verkürzte Antwort :)

Update 2: Testen auf IE in CSS

Zunächst sollten Sie, wenn möglich, @supports-Anweisungen anstelle von JS verwenden, um zu überprüfen, ob ein Browser ein bestimmtes CSS-Feature unterstützt.

.element {
  /* Styles für alle Browser */
}

@supports (display: grid) {
  .element {
    /* Styles für Browser, die display: grid unterstützen */
  }
}

(Beachten Sie, dass IE @supports überhaupt nicht unterstützt und alle Styles ignoriert, die innerhalb einer @supports-Anweisung platziert sind.)

Wenn das Problem nicht mit @supports gelöst werden kann, können Sie dies tun:

// JS

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  document.documentElement.classList.add('ie')
}

/* CSS */

.element {
  /* Styles, die überall angewendet werden */
}

.ie .element {
  /* Styles, die nur in IE angewendet werden */
}

(Hinweis: classList ist relativ neu in JS und ich glaube, dass es nur in IE11 funktioniert, möglicherweise auch in IE10.)

Wenn Sie SCSS (Sass) in Ihrem Projekt verwenden, kann dies vereinfacht werden zu:

/* SCSS (Sass) */

.element {
  /* Styles, die überall angewendet werden */

  .ie & {
    /* Styles, die nur in IE angewendet werden */
  }
}

Update 3: Hinzufügen von Microsoft Edge (nicht empfohlen)

Wenn Sie auch Microsoft Edge in die Liste aufnehmen möchten, können Sie folgendes tun. Ich empfehle es jedoch nicht, da Edge ein viel kompetenterer Browser als IE ist.

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident|Edge\//.test(ua);

if ( isIE ) {
  //IE & Edge spezifischer Code hier
}

48voto

bendytree Punkte 12194

Dies gibt true für alle Versionen von Internet Explorer zurück:

function isIE(userAgent) {
  userAgent = userAgent || navigator.userAgent;
  return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1;
}

Der Parameter userAgent ist optional und standardmäßig der Benutzeragent des Browsers.

33voto

john Smith Punkte 16566

Sie können das Navigator-Objekt verwenden, um Benutzer-Navigator zu erkennen, Sie benötigen dafür kein jQuery, die 4 Kommentare unten sind bereits enthalten, damit dieser Auszug wie erwartet funktioniert

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ 
 // Machen Sie Sachen mit Internet-Explorern ... :)
}

http://www.javascriptkit.com/javatutors/navigator.shtml

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X