wake-up-neo.net

Wie erkennt man IE11?

Wenn ich IE ermitteln möchte, verwende ich diesen Code:

function getInternetExplorerVersion()
{
  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 );
  }
  return rv;
}
function checkVersion()
{
  var msg = "You're not using Internet Explorer.";
  var ver = getInternetExplorerVersion();

  if ( ver > -1 )
  {
    msg = "You are using IE " + ver;
  }
  alert( msg );
}

IE11 gibt jedoch zurück: "Sie verwenden keinen Internet Explorer". Wie kann ich es erkennen?

195
user2591042

IE11 meldet sich nicht mehr als MSIE, entsprechend dieser Liste von Änderungen es ist beabsichtigt, um eine falsche Erkennung zu vermeiden.

Was Sie tun können, wenn Sie wirklich wissen möchten, dass es IE ist, ist die Zeichenfolge Trident/ im Benutzeragenten zu ermitteln, wenn navigator.appNameNetscape zurückgibt.

function getInternetExplorerVersion()
{
  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;
}

console.log('IE version:', getInternetExplorerVersion());

Beachten Sie, dass sich IE11 (afaik) noch in der Vorschau befindet und der Benutzeragent vor der Veröffentlichung geändert werden kann.

210

Verwenden Sie !(window.ActiveXObject) && "ActiveXObject" in window, um IE11 explizit zu erkennen.

Um eine Version von IE (vor Edge, "Trident") zu erkennen, verwenden Sie stattdessen "ActiveXObject" in window.

81
mcw0933

Verwenden Sie MSInputMethodContext als Teil einer Funktionserkennungsprüfung. Zum Beispiel:

//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;

Verweise

35
Paul Sweatte

Ich habe deine Antworten gelesen und eine Mischung gemacht. Es scheint mit Windows XP (IE7/IE8) und Windows 7 (IE9/IE10/IE11) zu funktionieren.

function ie_ver(){  
    var iev=0;
    var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
    var trident = !!navigator.userAgent.match(/Trident\/7.0/);
    var rv=navigator.userAgent.indexOf("rv:11.0");

    if (ieold) iev=new Number(RegExp.$1);
    if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
    if (trident&&rv!=-1) iev=11;

    return iev;         
}

Wenn ich 0 zurückschicke, bedeutet das natürlich kein IE.

15
Fabio

Holen Sie sich die IE Version vom User-Agent

var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}

So funktioniert es: Die User-Agent-Zeichenfolge für alle IE-Versionen enthält einen Teil "MSIE space version" oder "Trident other-text rv space-or-colon version ". In diesem Wissen holen wir die Versionsnummer aus einem regulären Ausdruck String.match(). Ein try-catch - Block wird verwendet, um den Code zu verkürzen. Andernfalls müssten wir die Array-Grenzen für Nicht-IE-Browser testen.

Hinweis: Der Benutzeragent kann gefälscht oder weggelassen werden, manchmal unbeabsichtigt, wenn der Benutzer seinen Browser auf einen "Kompatibilitätsmodus" eingestellt hat. Dies scheint jedoch in der Praxis kein großes Problem zu sein.


Holen Sie sich die IE Version ohne den User-Agent

var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 : 
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 : 
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );

So funktioniert es: Jede Version von IE bietet Unterstützung für zusätzliche Funktionen , die in nicht enthalten sind vorherige Versionen. So können wir die Funktionen von oben nach unten testen. Eine ternäre Sequenz wird hier der Kürze halber verwendet, obwohl die Anweisungen if-then Und switch genauso gut funktionieren würden. Die Variable ie wird auf eine Ganzzahl von 5 bis 11 oder 1 für ältere oder 99 für neuere/Nicht-IE festgelegt. Sie können den Wert auf 0 setzen, wenn Sie nur genau auf IE 1-11 testen möchten.

Hinweis: Die Objekterkennung kann unterbrochen werden, wenn Ihr Code auf einer Seite mit Skripten von Drittanbietern ausgeführt wird, die Polyfüllungen für Dinge wie document.addEventListener Hinzufügen. In solchen Situationen ist der Benutzeragent die beste Option.


Ermitteln Sie, ob der Browser modern ist

Wenn Sie nur interessiert sind, ob ein Browser die meisten HTML 5- und CSS 3-Standards unterstützt, können Sie davon ausgehen , dass IE 8 und niedriger das Hauptproblem bleibt Apps. Wenn Sie nach window.getComputedStyle Suchen, erhalten Sie auch eine ziemlich gute Mischung aus modernen Browsern (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 verbessert die Unterstützung von Standards erheblich, für native CSS-Animationen ist jedoch IE 10 erforderlich.

var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) ); 
11
Beejor

Angular JS macht das so.

msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
  msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}

msie ist eine positive Zahl, wenn IE und NaN für andere Browser wie Chrome, Firefox.

warum ? 

Seit Internet Explorer 11 hat sich die Benutzeragentenzeichenfolge erheblich geändert.

verweisen Sie dies: 

msdn # 1msdn # 2

9
Vishal Sharma

lösung: 

function GetIEVersion() {
  var sAgent = window.navigator.userAgent;
  var Idx = sAgent.indexOf("MSIE");
  // If IE, return version number.
  if (Idx > 0)
    return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));

  // If IE 11 then look for Updated user agent string.
  else if (!!navigator.userAgent.match(/Trident\/7\./))
    return 11;

  else
    return 0; //It is not IE

}
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){
  alert("This is IE " + GetIEVersion());
}else {
  alert("This no is IE ");
}		

7
coperniko

Ich verwende eine einfachere Methode:

Das globale Objekt des Navigators verfügt über eine Eigenschaftskontaktpunkte. In Internet Exlorer 11 heißt es msMaxTouchPoints tho.

Wenn Sie also suchen:

navigator.msMaxTouchPoints !== void 0 

Sie finden Internet Explorer 11.

3
Dvid Silva
var ua = navigator.userAgent.toString().toLowerCase();
var match = /(trident)(?:.*rv:([\w.]+))?/.exec(ua) ||/(msie) ([\w.]+)/.exec(ua)||['',null,-1];
var rv = match[2];
return rv;
2
areschen

Versuche dies:

var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var net = !!navigator.userAgent.match(/.NET4.0E/);
var IE11 = trident && net
var IEold = ( navigator.userAgent.match(/MSIE/i) ? true : false );
if(IE11 || IEold){
alert("IE")
}else{
alert("Other")
}
2
Krunal

Dies scheint eine bessere Methode zu sein. "indexOf" gibt -1 zurück, wenn nichts übereinstimmt. Bestehende Klassen werden dabei nicht überschrieben, sondern nur hinzugefügt.

// add a class on the body ie IE 10/11
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
    document.body.className = document.body.className+' ie11';
}
if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
    document.body.className = document.body.className+' ie10';
}
1
joe

Erkennen Sie die meisten Browser damit:

var getBrowser = function(){
  var navigatorObj = navigator.appName,
      userAgentObj = navigator.userAgent,
      matchVersion;
  var match = userAgentObj.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
  if( match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) match[2] = matchVersion[1];
  //mobile
  if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
    return match ? [match[1], match[2], mobile] : [navigatorObj, navigator.appVersion, mobile];
  }
  // web browser
  return match ? [match[1], match[2]] : [navigatorObj, navigator.appVersion, '-?'];
};

https://Gist.github.com/earlonrails/5266945

0
earlonrails

Um ehrlich zu sein, würde ich sagen, dass Sie eine Bibliothek benutzen, die das tut, was Sie brauchen (wie etwa platform.js). Irgendwann werden sich die Dinge ändern und die Bibliothek wird für diese Änderungen gerüstet, und die manuelle Analyse mit regulären Ausdrücken schlägt fehl.

Gott sei Dank IE geht weg ...

0

Nur für IE Browser:

var ie = 'NotIE'; //IE5-11, Edge+
    if( !!document.compatMode ) {
        if( !("ActiveXObject" in window) ) ) ie = 'Edge';
        if( !!document.uniqueID){
            if('ActiveXObject' in window && !window.createPopup ){ ie = 11; }
            else if(!!document.all){
                    if(!!window.atob){ie = 10;}
                    else if(!!document.addEventListener) {ie = 9;}
                    else if(!!document.querySelector){ie = 8;}
                    else if(!!window.XMLHttpRequest){ie = 7;}
                    else if(!!document.compatMode){ie = 6;}
                    else ie = 5;
                }
        }
    }

alert verwenden (ie);

Testen: 

var browserVersionExplorer = (function() {
    var ie = '<s>NotIE</s>',
        me = '<s>NotIE</s>';

    if (/msie\s|trident\/|Edge\//i.test(window.navigator.userAgent) && !!(document.documentMode || document.uniqueID || window.ActiveXObject || window.MSInputMethodContext)) {
            if (!!window.MSInputMethodContext) {
                ie = !("ActiveXObject" in window) ? 'Edge' : 11;
            } else if (!!document.uniqueID) {
                if (!!(window.ActiveXObject && document.all)) {
                    if (document.compatMode == "CSS1Compat" && !!window.DOMParser ) {
                        ie = !!window.XMLHttpRequest ? 7 : 6;
                    } else {
                        ie = !!(window.createPopup && document.getElementById) ? parseFloat('5.5') : 5;
                    }
                    if (!!document.documentMode && !!document.querySelector ) {
                        ie = !!(window.atob && window.matchMedia) ? 10 : ( !!document.addEventListener ? 9 : 8);
                    }
                } else ie = !!document.all ? 4 : (!!window.navigator ? 3 : 2);
            }
        }
        
    return ie > 1 ? 'IE ' + ie : ie;
})();

 alert(browserVersionExplorer);

Update 01 Jun 2017

Jetzt könnten wir etwas einfacher und einfacher verwenden: 

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;
0
James Peter

Ich habe das Ereignis onscroll am Element mit der Bildlaufleiste verwendet. Als ich im IE ausgelöst wurde, habe ich die folgende Bestätigung hinzugefügt:

onscroll="if (document.activeElement==this) ignoreHideOptions()"
0
Martin