13

Mam określone ścieżki kodu dla IE 10 i pozostałych wersji IE. Jeśli IE10 działa w trybie zgodności, wersja przeglądarki jest ustawiona na 7.0. Czy istnieje sposób na wykrycie, czy jest to IE 10, niezależnie od trybu standard/kompatybilność przy użyciu JavaScript/JQuery?Wykryj tryb zgodności IE10

+1

cały sens trybie zgodności jest to, że ma być udając IE7, więc wszystkie normalne wykrywania wersja triki powiedzą "IE7". To powiedziawszy, istnieje kilka sztuczek, których możesz użyć, i kilka podobnych pytań tutaj, które mogą już dać odpowiedź ... Zobacz 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, itp. (Wiem, że są one dla IE8 i IE9, ale możliwe niektóre wskazówki mogą pomóc?) – Spudley

+1

@Spudley, trójząb to sposób na wykrycie. – ABC

+1

Ciekawe, dlaczego w ogóle chcesz wykryć tryb zgodności? Powinieneś być w stanie uniknąć sytuacji, w której użytkownicy pracują w trybie kompatybilnym, używając odpowiednich znaczników meta, więc nie wiem, dlaczego musiałbyś je wykryć. – Spudley

Odpowiedz

5

wartość Trident w ciągu agenta użytkownika wskazuje rzeczywistą wersję prowadzony IG.

+0

O ile oczywiście IE11 nie zmienia sposobu działania. – Matthew

19

Można to wykryć przy użyciu ciąg navigator.userAgent np

„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 oznacza IE10

MSIE 7,0 oznacza kompatybilizację Tryb y

Więcej szczegółów: https://stackoverflow.com/a/5825518/255654

+0

Dzięki, mam to ustalone. – ABC

+0

Myślałem, że to była bardziej przejrzysta odpowiedź. –

+4

Jeśli umieścisz go w widoku zgodności za pośrednictwem narzędzi programistycznych, wydaje się to prawdą. Jeśli zostanie on umieszczony w widoku zgodności z powodu ustawień widoku zgodności w menu Narzędzia (na przykład według nazwy domeny), wygląda na to, że używa normalnych standardów userAgent. –

5

To właśnie używam z JQuery .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

Wierzę, że twój kod ustawia tylko IsIE i wersję, jeśli tryb zgodności zostanie wykryty w ciągu znaków UA. Czy to jest zamierzone? – ifugu

11

To powinno działać wykrywanie trybu zgodności dla MSIE.

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> 
Powiązane problemy