webentwicklung-frage-antwort-db.com.de

IE11 erkennt per Javascript, ob die Kompatibilitätsansicht aktiviert ist

weiß jemand, wie man überprüft, ob der Kompatibilitätsmodus IE 11 aktiviert ist, wenn ich über Javascript auf einer Website bin?

Ich habe die URL zu den Einstellungen der Listen-Kompatibilitätsansicht hinzugefügt. Aber wenn ich das mache

navigator.userAgent

in Entwicklertools wird es zurückgegeben

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET 4.0E; .NET 4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; rv : 11.0) wie Gecko

Auf der Microsoft-Website ( http://msdn.Microsoft.com/en-us/library/ie/hh869301 (v = vs.85) .aspx ) heißt es

Die kompatiblen ("kompatiblen") und Browser-Token ("MSIE") wurden entfernt.

Jede Hilfe zum Erkennen, ob eine Seite die Kompatibilitätsansicht über Javascript verwendet, ist sehr hilfreich. Danke im Voraus.

18
slee

[~ # ~] gelöst [~ # ~]

Auf der Suche nach einer Antwort auf diese Frage habe ich diese Lösung von Nenad Bulatovic in einem anderen Thread gefunden, aber seine Antwort wurde nicht als die richtige Antwort markiert. Ich habe dies in IE11 getestet und auf IE5 heruntergestuft und festgestellt, dass es für IE7-IE11 funktioniert, was großartig ist. Ich wollte es hier teilen, falls jemand es nützlich findet.

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>

quelle: IE10-Kompatibilitätsmodus erkennen

22
jaegs

Ich habe eine JavaScript-Funktion geschrieben, ie-truth , um genau dies zu tun. So funktioniert es, dass in IE 11, wenn der Kompatibilitätsmodus aktiviert ist, die User Agent-Zeichenfolge die Trident-Versionsnummer für IE 11 (7.0) as enthält sowie die MSIE-Versionsnummer für eine ältere Version von IE (z. B. 7.0 für IE 7). Dies gilt auch für den Kompatibilitätsmodus in älteren Versionen von IE .

Fügen Sie dies der Datei web.config hinzu, und die Anwendung überschreibt die Benutzereinstellungen.

<configuration>
  ...
  <system.webServer>
    ...
    <httpProtocol>
        <customHeaders>
          <clear/>
          <add name="X-UA-Compatible" value="IE=8; IE=9; IE=Edge" />
        </customHeaders>
    </httpProtocol>
    ...
  </system.webServer>
  ...
</configuration>

Platzieren Sie das Tag "system.webServer" am Ende Ihrer web.config-Datei kurz vor dem schließenden Tag "configuration". Zusätzlich können Sie das X-UA-kompatible Tag in IIS auf Ihrem Webserver hinzufügen, indem Sie Ihre Website auswählen und auf das Symbol HTTP Response Headers klicken.

7
Kris Truyens

Ich würde empfehlen, die Feature-Erkennung zu verwenden, anstatt die Browserversion indirekt abzufragen. Wenn Sie beispielsweise die HTML 5-Protokoll-API-Funktion benötigen, gehen Sie folgendermaßen vor:

if (window.history && window.history.pushState) {
    console.log('This is a SUPPORTED browser');
} else {
    console.log('NO! You require a browser that does X, please try installing ...');
}
1
geekdenz

Eine einfache Lösung, versuchen Sie es in der Konsole:

if (typeof(window.getSelection) == "undefined") {
   alert("Unsupported browser!");
} else {
   alert("Supported browser");
}

Erkennt alle IE weniger als IE9 (einschließlich Kompatibilitätsansicht). Erkennt auch Chrome 4-14 nach caniuse.

IE 6-8: Unterstützt Auswahlereignisse, jedoch nicht window.getSelection () Ref: https://caniuse.com/#feat=selection-api

0
user1775054

Anhand des Artikels ser Agent des IE Compatibility Cookbook können Sie feststellen, dass der Kompatibilitätsmodus aktiviert ist, jedoch nur, wenn die User Agent-Zeichenfolge zusammenarbeitet.

Insbesondere, wenn das Browser-Token MSIE 7.0 und der Trident Token sagt Trident/7.0, das ist ein ziemlich klarer Hinweis. Die Änderungen an der UA-Zeichenfolge seit IE11 RTM) zeigen jedoch, dass Sie sich in zukünftigen Versionen nicht auf diese als vorhersagbare Ressource verlassen können und sollten.

Weitere Informationen zu den einzelnen Token finden Sie im Thema Grundlegendes zu Benutzeragentenzeichenfolgen . (Es ist nicht ganz aktuell, aber was da ist, scheint für Ihre Interessen relevant zu sein.)

Hoffe das hilft...

- Lance

0
Lance Leonard

Eine zuverlässige Lösung Sie können bearbeiten , die für Internet Explorer 8 bis 11 funktioniert (für die Unterstützung von <IE8 ist zusätzlicher Code erforderlich).

Böse Nebenwirkungen (nur wenn IE <11 oder documentMode <11 - autsch):

  • Dies wird Probleme verursachen mit //@ sourceMappingURL=xx.js (Z. B. in jQuery <1.11 oder anderen Bibliotheken, die nicht auf das neuere Format //# Aktualisiert wurden).
  • Anscheinend verlangsamt @cc_on js Bewertung dramatisch (bezüglich Paul Irish, der sich mit seinen Sachen auskennt).

Der Hauptgrund dafür ist, dass:

var ieRealVersion = Function('return /*@cc_on @[email protected]*/;')();

gibt die echte Version von IE unabhängig vom Kompatibilitätsmodus zurück. Hinweise:

  • ieRealVersion ist für IE11 im IE11-Modus undefiniert, in diesem Fall jedoch document.documentMode == 11.
  • ieRealVersion ist 5.8 für IE8.
  • ieRealVersion ist 5.7 für IE7 und 5.7 für IE6 SP3. DocumentMode ist jedoch undefiniert, sodass Sie zusätzlichen Code benötigen, um den aktuellen Browser zu erkennen (ziemlich trivial, aber ich unterstütze IE6/7 nicht mehr, also habe ich mich nicht darum gekümmert, das zu codieren).
  • Dies ist ein zuverlässiger Weg, um nach Internet Explorer 6-10 zu schnüffeln, den ich seit vielen Jahren ohne Probleme verwendet habe (der aber aufgrund von @cc_on Probleme für andere verursacht hat).
0
robocat