Überprüfen Sie, ob der Benutzer den IE verwendet

391

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

Gibt es eine Möglichkeit, beim Starten der Funktion zu überprüfen, ob ein Benutzer Internet Explorer verwendet, und sie abzubrechen / abzubrechen, wenn er andere Browser verwendet, sodass sie nur für IE-Benutzer ausgeführt wird? Die Benutzer hier würden alle auf IE8 oder höheren Versionen sein, so dass ich IE7 und niedrigere Versionen nicht abdecken müsste.

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

Beispielfunktion:

$('.myClass').on('click', function(event)
{
    // my function
});
user2571510
quelle
1
Verwenden Sie den Modernizer, um IE oder andere Browser zu erkennen. stackoverflow.com/questions/13478303/...
chris
7
Nach modernen Webentwicklungsstandards ist es eine schlechte Praxis, zunächst für alte Versionen des IE zu entwickeln.
Rosseyn
7
Tatsächlich wird diese "schlechte Praxis" von den Standards selbst erzwungen, es ist also nicht die Schuld des Entwicklers ... Browser funktionieren anders und die Spezifikationen sind bei Implementierungsproblemen zu weich. Um etwas zu machen, das nicht fehlerhaft und nicht langweilig ist , muss man die Browsererkennung durchführen. Ich würde eine andere bewährte Methode vorschlagen : With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Sorry, aber dieser Wahnsinn muss irgendwann und irgendwie
enden
2
Es ist heute besser, "Feature-Erkennung" gegenüber "Browser-Erkennung" durchzuführen. Fragen Sie, ob der Browser stattdessen das tut, was Sie brauchen.
Chris Rogers
2
@Chris - Entschuldigung ... bedeutete, dass das eher ein witziger Ton war. Ich werde IE beschuldigen, meine Freude gestohlen zu haben und mich mit Bitterkeit und Frustration zurückzulassen. :)
JDB erinnert sich noch an Monica

Antworten:

477

Verwenden Sie die folgende JavaScript-Methode:

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

    if (msie > 0) // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

Die Details finden Sie auf der folgenden Microsoft-Support-Website:

So bestimmen Sie die Browserversion anhand des Skripts

Update: (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\./))  // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}
SpiderCode
quelle
27
Obwohl dies gut funktionieren würde, da die Variable ua niemals mit MSIE beginnt, ist das Schreiben if (msie > 0)irreführend. Wenn der Wert nicht gefunden wird, gibt die Funktion indexOf () -1 und nicht 0 zurück. Dies if (msie > -1)wäre daher erklärender.
Neville Nazerane
61
Dies gibt für mich NaN in IE11 zurück.
Verism
7
@verism und andere: Überprüfen Sie diese Antwort, die auch funktioniert für IE 11: stackoverflow.com/a/21712356/114029
Leniel Maccaferri
8
navigator.userAgent.indexOf ("MSIE")> 0 || navigator.userAgent.indexOf ("Trident")> 0 || navigator.userAgent.indexOf ("Edge")> 0
tylermauthe
12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)Ich weiß, dass dies auf 10 und 11 funktioniert. Wenn Sie <IE9 und Edge überprüfen können, bearbeiten Sie die Antwort.
Indolering
595

Es ist einige Jahre später und der Edge-Browser verwendet jetzt Chromium als Rendering-Engine.
Nach IE 11 zu suchen ist leider immer noch eine Sache.

Hier ist ein einfacher Ansatz, da alte Versionen von IE weg sein sollten.

if (window.document.documentMode) {
  // Do IE stuff
}

Hier ist meine alte Antwort (2014):

In Edge hat sich die User Agent-Zeichenfolge geändert.

/**
 * detect IEEdge
 * returns version of IE/Edge or false, if browser is not a Microsoft browser
 */
function detectIEEdge() {
    var ua = window.navigator.userAgent;

    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 => return version number
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

Beispielnutzung:

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 (thx @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 

Test bei CodePen:

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

Mario
quelle
4
Vielen Dank für Ihren Kommentar. Ich habe Ihre Antwort noch nicht überprüft, möchte aber eines kommentieren: Da das erste "Wenn" eine "Rückgabe" enthält, benötigen Sie danach kein "Sonst".
Mario
30
Nur neugierig, warum zum Teufel ändern sie die Benutzeragentenzeile in neuen Versionen von IE? MS möchte ernsthaft nicht, dass wir ihren schrecklichen Webbrowser erkennen.
c00000fd
3
@SameerAlibhai Was theoretisch gut klingt, aber in der Praxis, besonders derzeit, nicht praktisch ist. Manchmal treten Probleme auf, die eine einzelne "Feature" -Erkennung nicht umfasst, und außerdem weisen bestimmte Features Implementierungsprobleme auf, die nur mit Kenntnis des Browsers umgangen werden können. Was ist, wenn ich etwas Einfaches tun möchte, z. B. Browser-Statistiken sammeln?
Leicht
34
Es sollte beachtet werden, dass Edge nicht wirklich "IE12" ist, sondern tatsächlich ein völlig separater Browser. In Windows 10 sind sowohl IE11 als auch Edge installiert.
Moloko
16
Mein Hass auf IE wächst
Kolob Canyon
135

Wenn Sie nur wissen möchten, ob der Browser IE ist oder nicht, können Sie Folgendes 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 specific code goes here
}

Update 1: Eine bessere Methode

Ich empfehle das jetzt. Es ist immer noch sehr gut lesbar und ist weit weniger Code :)

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

if ( isIE ) {
  //IE specific code goes here
}

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

Update 2: Testen auf IE in CSS

Wenn Sie können, sollten Sie zunächst @supportsAnweisungen anstelle von JS verwenden, um zu überprüfen, ob ein Browser eine bestimmte CSS-Funktion unterstützt.

.element {
  /* styles for all browsers */
}

@supports (display: grid) {
  .element {
    /* styles for browsers that support display: grid */
  }
}

(Beachten Sie, dass der IE überhaupt keine Unterstützung unterstützt @supportsund alle in einer @supportsAnweisung platzierten Stile ignoriert .)

Wenn das Problem mit nicht behoben werden @supportskann, können Sie Folgendes tun:

// JS

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

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

.element {
  /* styles that apply everywhere */
}

.ie .element {
  /* styles that only apply in IE */
}

(Hinweis: classListist für JS relativ neu und ich denke, von den IE-Browsern funktioniert es nur in IE11. Möglicherweise auch in IE10.)

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

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

  .ie & {
    /* styles that only apply in IE */
  }
}

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

Wenn Sie auch Microsoft Edge zur Liste hinzufügen möchten, können Sie Folgendes tun. Allerdings empfehle ich es nicht als Edge ein viel kompetenteren Browser als IE ist.

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

if ( isIE ) {
  //IE & Edge specific code goes here
}
Daniel Tonon
quelle
5
Oder dasselbe in wenigen Bytes: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Trident /'); ;-)
Simon Steinberger
12
Meine Version macht für einen Menschen viel unmittelbarer Sinn, aber weniger Bytes sind immer gut :)
Daniel Tonon
7
oderms_ie = !!ua.match(/MSIE|Trident/)
xori
5
oder ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun
1
@SimonSteinberger hat das ~irgendeine Bedeutung?
1,21 Gigawatt
45

Dies gibt truefür jede Version 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 userAgentParameter ist optional und standardmäßig der Benutzeragent des Browsers.

Bendytree
quelle
Dies sollte gut sein, aber Sie haben im Grunde genommen vergessen, einen Standardwert für "return true" oder "return 1" für IE-Browser festzulegen. Dies gibt derzeit keinen Wert zurück, wenn IE-Browser erkannt werden.
Vincent Edward Gedaria Binua
10
Warum sollten Sie Edge als IE behandeln? In Bezug auf die Kompatibilität haben sie heutzutage wenig gemeinsam.
Minexew
@docta_faustus userAgent ist ein Parameter, kein globaler
bendytree
29

So macht es das Angularjs-Team ( v 1.6.5 ):

var msie, // holds major version number for IE, or NaN if UA is not IE.

// Support: IE 9-11 only
/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
msie = window.document.documentMode;

Dann gibt es mehrere Codezeilen, die überall verteilt sind und diese als Zahl verwenden, wie z

if (event === 'input' && msie <= 11) return false;

und

if (enabled && msie < 8) {
ThisClark
quelle
window.document.documentMode ist in MS Edge
Veselin Vasilev am
25
Es ist in MS Edge undefiniert, da MS Edge kein IE ist!
JCKödel
1
document.documentModewird von IE8 + unterstützt. Es wird 'undefined'für Edge oder Chrome / FireFox sein .... Ich habe diesen Code var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);so geändert, dass er die genaue IE-Version für IE8 +, 99 für Nicht-IE-Browser (normalerweise ist es ein moderner Browser) und 1 für den alten IE5-7 zurückgibt. Dies ist so geschrieben, weil wir normalerweise spezielle Arbeit nur für einige ältere IE benötigen. Also, if (IEver < 9) { ... }bedeutet, wenn es ein alter IE ist
S.Serpooshan
29

Sie können das Navigator-Objekt verwenden, um den Benutzer-Navigator zu erkennen. Sie benötigen dafür keine Abfrage

<script type="text/javascript">

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ 

 // Do stuff with Internet-Exploders ... :)
}

</script>

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

John Smith
quelle
4
Dies gibt mir falsch für meinen IE11
Curtis
2
Der Benutzeragent von IE11 unterscheidet sich von MSIE (XX). IE11s würden gefunden, indem nach Trident gesucht wird.
Orpheus
Dies ergibt in Firefox 45.0.2 ein falsches Positiv.
Tim S. Van Haren
Falscher Testindex Wenn Sie nicht wahr oder falsch zurückgeben, wie bei der Testfunktion Regex, haben Sie navigator.userAgent.indexOf ("Trident /")! = -1
Dahar Youssef
10

Verwenden Sie die obigen Antworten; einfache & komprimierte Rückgabe Boolean:

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

gdibble
quelle
1
Gibt in FireFox 44.0.2 unter Widnows 10 false zurück. Welche Version von FireFox gibt true @ SiKni8 zurück?
Arthur Hebert
9

Methode 01:
$ .browser wurde in jQuery Version 1.3 veraltet und in 1.9 entfernt

if ( $.browser.msie) {
  alert( "Hello! This is IE." );
}

Methode 02:
Verwenden von bedingten Kommentaren

<!--[if gte IE 8]>
<p>You're using a recent version of Internet Explorer.</p>
<![endif]-->

<!--[if lt IE 7]>
<p>Hm. You should upgrade your copy of Internet Explorer.</p>
<![endif]-->

<![if !IE]>
<p>You're not using Internet Explorer.</p>
<![endif]>

Methode 03:

 /**
 * Returns the version of Internet Explorer or a -1
 * (indicating the use of another browser).
 */
function getInternetExplorerVersion()
{
    var rv = -1; // Return value assumes failure.

    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.$1 );
    }

    return rv;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
    }

    alert( msg );
}

Methode 04:
Verwenden Sie JavaScript / Manuelle Erkennung

/*
     Internet Explorer sniffer code to add class to body tag for IE version.
     Can be removed if your using something like Modernizr.
 */
 var ie = (function ()
 {

     var undef,
     v = 3,
         div = document.createElement('div'),
         all = div.getElementsByTagName('i');

     while (
     div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i>< ![endif]-->',
     all[0]);

     //append class to body for use with browser support
     if (v > 4)
     {
         $('body').addClass('ie' + v);
     }

 }());

Referenzlink

Aamir Shahzad
quelle
@radhe Ich habe die Antwort aktualisiert, hoffentlich funktioniert dies für Sie.
Aamir Shahzad
Hinweis: Methode 2 funktioniert im Standardmodus nicht in IE10 oder besser. Für weitere Informationen: Bedingte Kommentare werden nicht mehr unterstützt
insertusernamehere
@insertusernamehere Sie haben sehr Recht, dafür denke ich, dass die Verwendung von .ie10Klasse eine der besten Optionen ist, wenn Sie eine CSS-Korrektur nur für ie10 durchführen. Wenn der Internet Explorer 10 ".ie10"dem HTML-Element eine Klasse hinzufügt <html class="ie10">, können Sie sie wie .ie10 .myclass {//some css here}
folgt
8

Ich wollte nur überprüfen, ob der Browser IE11 oder älter war, weil sie Mist sind.

function isCrappyIE() {
    var ua = window.navigator.userAgent;
    var crappyIE = false;
    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {// IE 10 or older => return version number        
        crappyIE = true;
    }
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {// IE 11 => return version number        
        crappyIE = true;
    }
    return crappyIE;
}   

if(!isCrappyIE()){console.table('not a crappy browser);}
Bill_VA
quelle
2
Dies bekommt meine Stimme für seine hohe
Wertschätzung
7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}
headione
quelle
Beantwortet die Frage nicht. Edge ist kein IE.
hda
hda, Frage stammt aus dem Jahr 2013, ich denke, dass es heute interessant ist, "Edge"
Boss COTIGA
5

Mit modernizr

Modernizr.addTest('ie', function () {
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf('MSIE ') > 0;
    var ie11 = ua.indexOf('Trident/') > 0;
    var ie12 = ua.indexOf('Edge/') > 0;
    return msie || ie11 || ie12;
});
kevnk
quelle
Beantwortet die Frage nicht, da Edge kein IE ist. Auch Edge ist nicht IE12. Wenn Chromium-based Edge veröffentlicht wird, sollten Sie dieser Liste auch Chrome oder Opera hinzufügen. (Was auch immer Sie damit erreichen möchten, es wäre dann einfacher, Firefox zu erkennen)
hda
5

Oder diese wirklich kurze Version gibt true zurück, wenn der Browser Internet Explorer ist:

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}
Floris
quelle
4

Noch eine einfache (aber für Menschen lesbare) Funktion, um festzustellen, ob der Browser IE ist oder nicht (Edge wird ignoriert, was überhaupt nicht schlecht ist):

function isIE() {
  var ua = window.navigator.userAgent;
  var msie = ua.indexOf('MSIE '); // IE 10 or older
  var trident = ua.indexOf('Trident/'); //IE 11

  return (msie > 0 || trident > 0);
}
Chuck Le Butt
quelle
3

Wenn Sie den Benutzeragenten nicht verwenden möchten, können Sie dies auch tun, um zu überprüfen, ob der Browser IE ist. Der kommentierte Code wird tatsächlich in IE-Browsern ausgeführt und wandelt "false" in "true" um.

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   
dev4life
quelle
1
IE11 unterstützt keine bedingte Kompilierung
Gabriel Llamas
Ich habe es gerade versucht und es hat immer noch funktioniert. Bist du sicher, dass es das nicht unterstützt?
Dev4life
3

Ich weiß, dass dies eine alte Frage ist, aber falls jemand erneut darauf stößt und Probleme mit der Erkennung von IE11 hat, finden Sie hier eine funktionierende Lösung für alle aktuellen Versionen von IE.

var isIE = false;
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
    isIE = true;   
}
Ty Bailey
quelle
3

Ich habe das benutzt

function notIE(){
    var ua = window.navigator.userAgent;
    if (ua.indexOf('Edge/') > 0 || 
        ua.indexOf('Trident/') > 0 || 
        ua.indexOf('MSIE ') > 0){
       return false;
    }else{
        return true;                
    }
}
Jop Knoppers
quelle
2

Viele Antworten hier, und ich möchte meine Eingabe hinzufügen. IE 11 war so ein Arsch in Bezug auf Flexbox (siehe alle seine Probleme und Inkonsistenzen hier ), dass ich wirklich eine einfache Möglichkeit brauchte, um zu überprüfen, ob ein Benutzer einen IE-Browser (bis einschließlich 11) verwendet, aber Edge ausschließt, weil Edge es tatsächlich ist sehr schön.

Basierend auf den hier gegebenen Antworten habe ich eine einfache Funktion geschrieben, die eine globale boolesche Variable zurückgibt, die Sie dann später verwenden können. Es ist sehr einfach, nach IE zu suchen.

var isIE;
(function() {
    var ua = window.navigator.userAgent,
        msie = ua.indexOf('MSIE '),
        trident = ua.indexOf('Trident/');

    isIE = (msie > -1 || trident > -1) ? true : false;
})();

if (isIE) {
    alert("I am an Internet Explorer!");
}

Auf diese Weise müssen Sie die Suche nur einmal durchführen und das Ergebnis in einer Variablen speichern, anstatt das Ergebnis bei jedem Funktionsaufruf abrufen zu müssen. (Soweit ich weiß, müssen Sie nicht einmal auf ein Dokument warten, das zur Ausführung dieses Codes bereit ist, da der Benutzeragent nicht mit dem DOM verbunden ist.)

Bram Vanroy
quelle
2

Versuchen Sie dies, wenn Sie jquery version> = 1.9 verwenden .

var browser;
jQuery.uaMatch = function (ua) {
    ua = ua.toLowerCase();

    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
        /(webkit)[ \/]([\w.]+)/.exec(ua) ||
        /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
        /(msie) ([\w.]+)/.exec(ua) || 
        ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
       /(Trident)[\/]([\w.]+)/.exec(ua) || [];

    return {
        browser: match[1] || "",
        version: match[2] || "0"
    };
};
// Don't clobber any existing jQuery.browser in case it's different
if (!jQuery.browser) {
    matched = jQuery.uaMatch(navigator.userAgent);
    browser = {};

    if (matched.browser) {
        browser[matched.browser] = true;
        browser.version = matched.version;
    }

    // Chrome is Webkit, but Webkit is also Safari.
    if (browser.chrome) {
        browser.webkit = true;
    } else if (browser.webkit) {
        browser.safari = true;
    }

    jQuery.browser = browser;
}

Wenn Sie jQuery Version <1.9 verwenden ($ .browser wurde in jQuery 1.9 entfernt), verwenden Sie stattdessen den folgenden Code:

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});
Rohan Kumar
quelle
Danke dafür. Leider sind wir noch auf Version 1.7.2 und können dies noch nicht ändern.
user2571510
Soweit ich sehen kann, werden neuere IEs, die auf der Trident-Engine basieren, nicht berücksichtigt.
Bram Vanroy
Aktualisiert für die neuesten IEs basierend auf Trident
Rohan Kumar
1

Die Lösung von @ SpiderCode funktioniert nicht mit IE 11. Hier ist die beste Lösung, die ich fortan in meinem Code verwendet habe, wo ich für eine bestimmte Funktion eine Browsererkennung benötige.

IE11 meldet nicht mehr als MSIE. Gemäß dieser Liste von Änderungen ist es beabsichtigt, eine Fehlerkennung zu vermeiden.

Wenn Sie wirklich wissen möchten, dass es sich um einen IE handelt, können Sie den Dreizack / die Zeichenfolge im Benutzeragenten erkennen, wenn navigator.appName Netscape zurückgibt, etwa (den nicht getesteten);

Dank dieser Antwort

function isIE()
{
  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.$1 );
  }
  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.$1 );
  }
  return rv == -1 ? false: true;
}
AnujKu
quelle
1

Unten habe ich einen eleganten Weg gefunden, dies beim Googeln zu tun ---

/ detect IE
var IEversion = detectIE();

if (IEversion !== false) {
  document.getElementById('result').innerHTML = 'IE ' + IEversion;
} else {
  document.getElementById('result').innerHTML = 'NOT IE';
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * 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';

  // IE 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 (IE 12+)
  // 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;
}
Rameshwar Vyevhare
quelle
1
Dies ist genau der Code aus meinem Stift bei CodePen , der Teil meiner Antwort auf diese Frage ist . ;-)
Mario
1
Ja, ich habe das gleiche verwendet, aber Stack-Overflow-Leute möchten keinen Link teilen. wird den Link in Referenz hier weiter aktualisieren. Danke für die tolle Arbeit Mario.
Rameshwar Vyevhare
1

Aktualisieren Sie die Antwort von SpiderCode, um Probleme zu beheben, bei denen die Zeichenfolge 'MSIE' -1 zurückgibt, aber mit 'Trident' übereinstimmt. Früher wurde NAN zurückgegeben, jetzt wird für diese Version von IE 11 zurückgegeben.

   function msieversion() {
       var ua = window.navigator.userAgent;
       var msie = ua.indexOf("MSIE ");
       if (msie > -1) {
           return ua.substring(msie + 5, ua.indexOf(".", msie));
       } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) {
           return 11;
       } else {
           return false;
       }
    }
JeremyS
quelle
0

Sie können alle Internet Explorer (Letzte getestete Version 12) erkennen.

<script>
    var $userAgent = '';
    if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){
       $userAgent='ie';
    } else {
       $userAgent='other';
    }

    alert($userAgent);
</script>

Siehe hier https://jsfiddle.net/v7npeLwe/

Rogerio de Moraes
quelle
0
function msieversion() {
var ua = window.navigator.userAgent;
console.log(ua);
var msie = ua.indexOf("MSIE ");

if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { 
    // If Internet Explorer, return version numbe
    // You can do what you want only in IE in here.
    var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
    if (isNaN(version_number)) {
        var rv_index=ua.indexOf("rv:");
        version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index)));
    }
    console.log(version_number);
} else {       
    //other browser   
    console.log('otherbrowser');
}
}

Sie sollten das Ergebnis in der Konsole sehen, bitte verwenden Sie Chrome Inspect.

linjie
quelle
0

Ich habe diesen Code in die Dokumentbereitschaftsfunktion eingefügt und er wird nur im Internet Explorer ausgelöst. In Internet Explorer 11 getestet.

var ua = window.navigator.userAgent;
ms_ie = /MSIE|Trident/.test(ua);
if ( ms_ie ) {
    //Do internet explorer exclusive behaviour here
}
Isaac Levi Felix Salinas
quelle
0

Dies funktioniert nur unter der IE 11-Version.

var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE "))));

console.log("version number",ie_version);

Murali Krishna
quelle
0

JavaScript-Funktion zum Erkennen der Version von Internet Explorer oder Edge

function ieVersion(uaString) {
  uaString = uaString || navigator.userAgent;
  var match = /\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(uaString);
  if (match) return parseInt(match[2])
}
Shohel
quelle
0

Nekromantie.

Um nicht von der Benutzeragentenzeichenfolge abhängig zu sein, überprüfen Sie einfach einige Eigenschaften:

if (document.documentMode) 
{
    console.log('Hello Microsoft IE User!');
}

if (!document.documentMode && window.msWriteProfilerMark) {
    console.log('Hello Microsoft Edge User!');
}

if (document.documentMode || window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User!');
}

if (window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User in fewer characters!');
}

Dies erkennt auch den neuen Chredge (Anaheim):

function isEdg()
{ 

    for (var i = 0, u="Microsoft", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Und das erkennt Chrom:

function isChromium()
{ 

    for (var i = 0, u="Chromium", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Und diese Safari:

if(window.safari)
{
    console.log("Safari, yeah!");
}
Stefan Steiger
quelle
-1

Versuchen Sie es so

if ($.browser.msie && $.browser.version == 8) {
    //my stuff

}
Deepak Kumar
quelle
jQuery hat dies in 1.3 abgelehnt und in 1.9 vollständig entfernt.
Geca
-1

Ich denke es wird dir hier helfen

function checkIsIE() {
    var isIE = false;
    if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
        isIE = true;
    }
    if (isIE)  // If Internet Explorer, return version number
    {
        kendo.ui.Window.fn._keydown = function (originalFn) {
            var KEY_ESC = 27;
            return function (e) {
                if (e.which !== KEY_ESC) {
                    originalFn.call(this, e);
                }
            };
        }(kendo.ui.Window.fn._keydown);

        var windowBrowser = $("#windowBrowser").kendoWindow({
            modal: true,
            id: 'dialogBrowser',
            visible: false,
            width: "40%",
            title: "Thông báo",
            scrollable: false,
            resizable: false,
            deactivate: false,
            position: {
                top: 100,
                left: '30%'
            }
        }).data('kendoWindow');
        var html = '<br /><div style="width:100%;text-align:center"><p style="color:red;font-weight:bold">Please use the browser below to use the tool</p>';
        html += '<img src="/Scripts/IPTVClearFeePackage_Box/Images/firefox.png"/>';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/chrome.png" />';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/opera.png" />';
        html += '<hr /><form><input type="button" class="btn btn-danger" value="Đóng trình duyệt" onclick="window.close()"></form><div>';
        windowBrowser.content(html);
        windowBrowser.open();

        $("#windowBrowser").parent().find(".k-window-titlebar").remove();
    }
    else  // If another browser, return 0
    {
        return false;
    }
}
AirBlack
quelle
-3

Sie können $.browserInformationen zu Name, Hersteller und Version abrufen.

Siehe http://api.jquery.com/jQuery.browser/

Roemer
quelle
7
"Diese Eigenschaft wurde in jQuery 1.9 entfernt und ist nur über das Plugin jQuery.migrate verfügbar."
Reeno