IE-Version (vor v9) in JavaScript erkennen

Lesezeit: 4 Minuten

IE Version vor v9 in JavaScript erkennen
Chad Decker

Ich möchte Benutzer unserer Website auf eine Fehlerseite leiten, wenn sie eine Version von verwenden Internet Explorer vor v9. Es ist unsere Zeit und unser Geld einfach nicht wert, sie zu unterstützen IE pre-v9. Benutzer aller anderen Nicht-IE-Browser sind in Ordnung und sollten nicht zurückgewiesen werden. Hier ist der vorgeschlagene Code:

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

Wird dieser Code den Zweck erfüllen?

Um ein paar Kommentare abzufangen, die wahrscheinlich auf mich zukommen werden:

  1. Ja, ich weiß, dass Benutzer ihre fälschen können useragent Schnur. Ich mache mir keine Sorgen.
  2. Ja, ich weiß, dass Programmierprofis es vorziehen, Feature-Support statt Browser-Typ zu erschnüffeln, aber ich glaube nicht, dass dieser Ansatz in diesem Fall sinnvoll ist. Ich weiß bereits, dass alle (relevanten) Nicht-IE-Browser die Funktionen unterstützen, die ich brauche, und das alles pre-v9 IE Browser nicht. Es wäre eine Verschwendung, Feature für Feature auf der gesamten Website zu überprüfen.
  3. Ja, ich weiß, dass jemand versucht, auf die Website zuzugreifen IE v1 (oder >= 20) würde ‘badBrowser’ nicht auf true setzen und die Warnseite würde nicht richtig angezeigt werden. Das ist ein Risiko, das wir bereit sind einzugehen.
  4. Ja, ich weiß, dass Microsoft “bedingte Kommentare” hat, die zur genauen Erkennung der Browserversion verwendet werden können. IE unterstützt ab jetzt keine bedingten Kommentare mehr IE 10was diesen Ansatz absolut nutzlos macht.

Irgendwelche anderen offensichtlichen Probleme, die es zu beachten gilt?

  • “Es ist unsere Zeit und unser Geld einfach nicht wert, IE vor v9 zu unterstützen”. Ich wünschte ich könnte das machen.

    Benutzer377628

    9. Juni 2012 um 22:15 Uhr


  • Basierend auf Punkt [2] Ich werde Modernizr nicht vorschlagen (en.wikipedia.org/wiki/Modernizr) – jeder muss irgendwo eine Grenze in den Sand ziehen – aber IE9 scheint eine hohe Linie zu sein

    – amelwin

    9. Juni 2012 um 22:21 Uhr

  • Bedingte Kommentare sind nur normale Kommentare. Nur IE interpretiert sie als besondere. IE10+ wird das nicht mehr tun.

    –Andreas

    9. Juni 2012 um 22:56 Uhr


  • Bedingte Kommentare werden von IE 10 genauso behandelt wie Nicht-IE-Browser. Sie sind gültige HTML-Kommentare und werden daher als solche behandelt. Ich stimme Andreas zu und denke, dass bedingte Kommentare der richtige Weg sind.

    – Tim unten

    9. Juni 2012 um 23:00 Uhr


  • Die offizielle Dokumentation, die besagt, dass IE10+ keine bedingten Kommentare unterstützt: blogs.msdn.com/b/ie/archive/2011/07/06/… – Danke an: stackoverflow.com/a/9900331/320399

    – hell

    18. Dezember 2012 um 19:51 Uhr


1646260508 883 IE Version vor v9 in JavaScript erkennen
Werro

Geben Sie die IE-Version zurück, oder wenn nicht, geben Sie false zurück

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

Beispiel:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

oder

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

oder

if (isIE()) {
 // is IE
} else {
 // Other browser
}

  • Funktioniert nicht für IE11. Ab IE 11 haben sie den UA-String in geändert "mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"

    – Annie

    4. Juli 2013 um 12:22 Uhr

  • Bitte beachten Sie, dass in FF “false < 9" "true" ist. Zustand sollte also sein if (isIE () && isIE () < 9) {

    – Zeus

    8. September 2013 um 10:53 Uhr


  • @DeadlyChambers vielleicht lief es im IE7-Standardmodus? msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx

    – Maurer81

    19. November 2013 um 22:35 Uhr

  • Die genehmigte Antwort ist, wie man die IE-Version in HTML erkennt. Damit ist die ursprüngliche Frage beantwortet.

    – Matt Wagner

    6. Januar 2015 um 21:56 Uhr

  • @PrasadGayan – Microsoft Edge ist nicht Internet Explorer. Die Rückgabe von false scheint also das Richtige zu sein.

    – BryanGrezeszak

    9. Juni 2017 um 3:58 Uhr

  • Die JavaScript-Version der Antwort von @Tim Down hat für mich hervorragend funktioniert. Ich habe BrowserStack verwendet, um es mit Windows 7 und IE 8, 9, 10 und 11 zu testen; Mac OS X Snow Leopard mit Safari 5.1, Firefox 28.0, Chrome 33.0 und Opera 20.0; iPhone 5 Mobile Safari; und Android Samsung Galaxy Tab 2 10.1 4.0. Wie erwartet meldete nur IE8, dass es sich um IeLessThan9 handelte. Hübsch!

    – Steve Saporta

    27. März 2014 um 20:52 Uhr

1646260508 499 IE Version vor v9 in JavaScript erkennen
Andreas

Falls sonst niemand eine hinzugefügt hat addEventLister-Methode verwenden und Sie den richtigen Browsermodus verwenden, können Sie mit IE 8 oder weniger suchen

if (window.attachEvent && !window.addEventListener) {
    // "bad" IE
}

Älterer Internet Explorer und AttachEvent (MDN)

  • Dies scheint der effizienteste Weg zu sein, IE <= 8 vollständig in JavaScript zu erkennen - und ist großartig für Leute wie mich, die nach einer Möglichkeit gesucht haben, dies zu tun.

    – Gregory Magarshak

    18. März 2013 um 15:33 Uhr

  • Toll! Dies erkennt auch IE9 im Quirks-Modus, wonach ich gesucht habe.

    – sstur

    4. April 2014 um 18:40 Uhr

  • Obwohl dies eine “einfach zu verwendende” Lösung ist, birgt sie einige Risiken. Jeder in Ihrem Unternehmen (der Ihre Lösung nicht kennt) kann „addEventListener“ oder „attachEvent“ implementieren, um das Fehlen in IE 8 zu beheben. Und dann funktioniert Ihr Code nicht mehr.

    – Ze Carlos

    15. Januar 2015 um 16:08 Uhr

MSIE (v6 – v7 – v8 – v9 – v10 – v11) einfach erkennen:

if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
   // MSIE
}

  • Dies scheint der effizienteste Weg zu sein, IE <= 8 vollständig in JavaScript zu erkennen - und ist großartig für Leute wie mich, die nach einer Möglichkeit gesucht haben, dies zu tun.

    – Gregory Magarshak

    18. März 2013 um 15:33 Uhr

  • Toll! Dies erkennt auch IE9 im Quirks-Modus, wonach ich gesucht habe.

    – sstur

    4. April 2014 um 18:40 Uhr

  • Obwohl dies eine “einfach zu verwendende” Lösung ist, birgt sie einige Risiken. Jeder in Ihrem Unternehmen (der Ihre Lösung nicht kennt) kann „addEventListener“ oder „attachEvent“ implementieren, um das Fehlen in IE 8 zu beheben. Und dann funktioniert Ihr Code nicht mehr.

    – Ze Carlos

    15. Januar 2015 um 16:08 Uhr

Hier ist der Weg AngularJS Schecks für IE

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

if (msie < 9) {
    // code for IE < 9
}

  • Wow, das ist so viel einfacher als all das bedingte Kommentieren! Keine Einschränkungen?

    – andrewb

    24. Juli 2015 um 1:24 Uhr

  • Laut den Dokumenten unterstützt IE8+ diese Eigenschaft, daher sollte es meiner Meinung nach für die meisten Fälle ausreichen.

    – iurii

    24. Juli 2015 um 6:26 Uhr

  • In der MSDN-Referenz heißt es: „Wenn das aktuelle Dokument noch nicht bestimmt wurde, gibt documentMode einen Wert von Null (0) zurück. Dies geschieht normalerweise, wenn ein Dokument geladen wird.“ Bedeutet dies, dass Sie möglicherweise keine gültige Antwort innerhalb eines in geladenen Skripts erhalten?

    – Erik Knowles

    30. Juli 2015 um 16:22 Uhr

  • Ich denke, Sie können es beheben, indem Sie den Wert auf window.onload überprüfen, wenn das Dokument bereits geladen ist.

    – iurii

    30. Juli 2015 um 18:27 Uhr

  • Beeindruckend! Klug. Danke!

    – GTodorow

    3. Juni 2021 um 21:03 Uhr

916840cookie-checkIE-Version (vor v9) in JavaScript erkennen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy