13

Ich habe einige spezifische Codepfade für IE 10 und der Rest der IE-Versionen. Wenn IE10 im Kompatibilitätsmodus ausgeführt wird, wird die Browserversion auf 7.0 festgelegt. Gibt es eine Möglichkeit zu erkennen, ob es IE 10 ist, unabhängig vom Standard/Kompatibilitätsmodus mit JavaScript/JQuery?Detect IE10 Kompatibilitätsmodus

+1

der ganze Sinn des Kompatibilitätsmodus ist, dass es angenommen hat IE7 sein werden vorgibt, so dass alle die normale Version Erkennung Tricks sagen "IE7". Das heißt, es gibt ein paar Tricks, die Sie verwenden können, und einige ähnliche Fragen hier, die möglicherweise bereits die Antwort geben ... Siehe http://stackoverflow.com/questions/1328963/detect-ie8-compatibility-mode, http: //stackoverflow.com/questions/5825385/javascript-can-i-detect-ie9-if-its-in-ie7-or-ie8-compatibility-mode, etc. (Ich weiß, dass diese für IE8 und IE9, aber möglicherweise sind einige der Tipps dort können helfen?) – Spudley

+1

@Spudley, Dreizack ist der Weg zu erkennen, denke ich. – ABC

+1

aus Interesse, warum müssen Sie überhaupt compat Modus erkennen? Sie sollten vermeiden können, dass Benutzer im Compat-Modus ausgeführt werden, indem Sie geeignete Meta-Tags verwenden, sodass ich nicht weiß, warum Sie sie erkennen müssen. – Spudley

Antwort

5

Trident Wert in dem String-User-Agent zeigt die aktuelle Version des IE zu sein Lauf.

+0

Es sei denn natürlich, IE11 ändert die Art und Weise, wie dies funktioniert. – Matthew

19

Sie können dies die navigator.userAgent Zeichenfolge, zum Beispiel unter Verwendung erkennen

„Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E;. NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Zune 4.7)“

Trident/6.0 bedeutet IE10

MSIE 7.0 bedeutet Kompatibilität y-Modus

Weitere Details: https://stackoverflow.com/a/5825518/255654

+0

Danke, ich habe es herausgefunden. – ABC

+0

Ich dachte, das wäre die klarere Antwort. –

+4

Wenn Sie es in Kompatibilitätsansicht über Dev-Tools einfügen, scheint dies wahr. Wenn es aufgrund der Einstellungen der Kompatibilitätsansicht im Menü Extras (z. B. nach Domänennamen) in die Kompatibilitätsansicht versetzt wird, scheint es den normalen Standard userAgent zu verwenden. –

5

Das ist, was ich von JQuery verwenden .ready

$(document).ready(function() { 
    var iec = new IECompatibility(); 
    alert('IsIE: ' + iec.IsIE + '\nVersion: ' + iec.Version + '\nCompatability On: ' + iec.IsOn); 
    }); 

    function IECompatibility() { 
    var agentStr = navigator.userAgent; 
    this.IsIE = false; 
    this.IsOn = undefined; //defined only if IE 
    this.Version = undefined; 

    if (agentStr.indexOf("MSIE 7.0") > -1) { 
     this.IsIE = true; 
     this.IsOn = true; 
     if (agentStr.indexOf("Trident/6.0") > -1) { 
     this.Version = 'IE10'; 
     } else if (agentStr.indexOf("Trident/5.0") > -1) { 
     this.Version = 'IE9'; 
     } else if (agentStr.indexOf("Trident/4.0") > -1) { 
     this.Version = 'IE8'; 
     } else { 
     this.IsOn = false; // compatability mimics 7, thus not on 
     this.Version = 'IE7'; 
     } 
    } //IE 7 
    } 

Ben Hobgood

+0

Ich glaube, dass Ihr Code nur ISIE und Version setzt, wenn der Kompatibilitätsmodus in der UA-Zeichenfolge gefunden wird. Ist das beabsichtigt? – ifugu

11

arbeiten Dies sollte Kompatibilitätsmodus für MSIE erkennen.

iecheck.js

function trueOrFalse() { 
    return true; 
} 

function IeVersion() { 
    //Set defaults 
    var value = { 
     IsIE: false, 
     TrueVersion: 0, 
     ActingVersion: 0, 
     CompatibilityMode: false 
    }; 

    //Try to find the Trident version number 
    var trident = navigator.userAgent.match(/Trident\/(\d+)/); 
    if (trident) { 
     value.IsIE = true; 
     //Convert from the Trident version number to the IE version number 
     value.TrueVersion = parseInt(trident[1], 10) + 4; 
    } 

    //Try to find the MSIE number 
    var msie = navigator.userAgent.match(/MSIE (\d+)/); 
    if (msie) { 
     value.IsIE = true; 
     //Find the IE version number from the user agent string 
     value.ActingVersion = parseInt(msie[1]); 
    } else { 
     //Must be IE 11 in "edge" mode 
     value.ActingVersion = value.TrueVersion; 
    } 

    //If we have both a Trident and MSIE version number, see if they're different 
    if (value.IsIE && value.TrueVersion > 0 && value.ActingVersion > 0) { 
     //In compatibility mode if the trident number doesn't match up with the MSIE number 
     value.CompatibilityMode = value.TrueVersion != value.ActingVersion; 
    } 
    return value; 
} 

iecheck.html

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Testing IE Compatibility Mode</title> 
    <script src="iecheck.js" type="text/javascript"></script> 
</head> 
<body> 
<div id="results">Results: </div> 
</br> 
<script type="text/javascript"> 

var ie = IeVersion(); 

document.write("IsIE: " + ie.IsIE + "</br>"); 
document.write("TrueVersion: " + ie.TrueVersion + "</br>"); 
document.write("ActingVersion: " + ie.ActingVersion + "</br>"); 
document.write("CompatibilityMode: " + ie.CompatibilityMode + "</br>"); 

</script> 
</body> 
</html>