Ich muss wissen, ob der Browser, der sich über die Benutzeragentenzeichenfolge als IE7 oder IE8 identifiziert, wirklich diese Browser sind oder ob es sich um IE9 im 7- oder 8-Kompatibilitätsmodus handelt.
Nach dem, was ich in der Benutzeragentenzeichenfolge sehen kann, bietet ein IE9 im IE7-Kompatibilitätsmodus eine identische Zeichenfolge wie ein echter IE7. Gibt es eine zusätzliche Eigenschaft / ein zusätzliches Element / Objekt, die ich testen kann, um festzustellen, ob es sich um "wirklich" verkleideten IE9 handelt?
Ich gehe davon aus, dass der Dokumentmodus nicht hilft, da die Seite, auf die mein Skript geladen wird, entweder Macken erzwingen oder eine bestimmte Einstellung erzwingen kann.
Ich hoffe, dass IE9 eine Eigenschaft hat, die existiert und testbar ist, unabhängig davon, ob es sich im 7-, 8- oder 9-Modus befindet.
Bearbeitet, um hinzuzufügen ...
OK, ich sehe, wo ich jetzt falsch liege. Ich habe das Dropdown-Menü "Browsermodus" verwendet und auf IE8 und IE7 umgeschaltet und dachte, dies sei "IE8-Kompatibilitätsmodus" bzw. "IE7-Kompatibilitätsmodus". Das stimmt natürlich nicht. Der Browsermodus der Entwicklertools schaltet ihn wirklich auf "wie" diese alten Browser um, daher ist es nur richtig, dass die ursprünglichen Useragent-Zeichenfolgen gemeldet werden.
Wenn ich den Browsermodus in IE9- oder IE9-Kompatibilität verlasse und stattdessen die Dropdown-Varianten für den Dokumentmodus ausprobiere, wird "Trident / 5.0" tatsächlich in allen 8 Kombinationen (zwei Browsermodi und 4 Dokumentmodi) angezeigt. Ich muss mich nur von der Auswahl des Browsermodus IE7 und IE8 fernhalten, da es sich tatsächlich um (simulierte) IE7 und IE8 handelt.
Es gibt also keine Möglichkeit, dass eine Seite, ein Nicht-Entwickler-Benutzer, ein Meta-Tag oder die Kompatibilitätsliste von Microsoft IE9 in diesen nicht identifizierbaren Zustand versetzt.
Nur die Verwendung if(navigator.userAgent.indexOf("Trident/5")>-1)
wird ausreichen.
Keine Sorge, dies gilt nicht für Stile, Formatierungen, Logik oder Seiteninhalte. Ich benutze die Feature-Erkennung für diese Dinge. Ich muss nur IE9 erkennen (unabhängig davon, in welchem Modus es sich befindet) und eine Entscheidung über den Inhalt ohne Seiten treffen.
Vielen Dank, dass Sie mich mit Ihren Vorschlägen und Links zur Antwort geführt haben.
Antworten:
Tatsächlich unterscheidet sich die Benutzeragentenzeichenfolge für IE9, wenn sie im IE7-Kompatibilitätsmodus ausgeführt wird. Dies ist daher eine der besten Möglichkeiten, um zwischen verschiedenen IE-Versionen zu unterscheiden.
Einführung in die User Agent-Zeichenfolge von IE9 :
(Hervorhebung von mir hinzugefügt). Die Benutzeragentenzeichenfolge ist also dieselbe wie die, die sich als "Mozilla / 4.0" und MSIE 7.0 meldet, aber IE9 ist immer Trident / 5.0 - unabhängig davon, ob MSIE 7.0, MSIE 8.0 oder MSIE 9.0 angezeigt wird.
Eigentlich sollten Sie sich diese großartige Zusammenstellung ansehen : Browser ID (User-Agent) Strings oder noch besser useragentstrings.com
quelle
document.documentMode
ist der beste Weg für den Dokumentmodus.quelle
<script> if (document.documentMode == 7) alert("Yo, put it in its normal mode, will ya?") </script>
. Der echte (!) IE7 und alle Nicht-IEs geben 'undefined' zurück, nur IE8 / 9 in Comp. mode return 7. Ich kann IE10 nicht testen, aber das sollte dasselbe sein.IE7 enthält keine Informationen zu Trident
IE8 enthält diese Zeichenfolge: "Trident / 4.0"
IE9 enthält diese Zeichenfolge: "Trident / 5.0"
IE9 im Kompatibilitätsmodus:
IE9 im normalen Modus:
quelle
Hier ist eine Tabelle aller Browser- und Dokumentmodi für IE9 :
quelle
Ich hoffe, dass IE9 eine Eigenschaft hat, die existiert und testbar ist, unabhängig davon, ob es sich im 7-, 8- oder 9-Modus befindet.
Überprüfen Sie zB auf style.opacity , es wurde in IE9 eingeführt und ist unabhängig vom Kompatibilitätsmodus verfügbar:
quelle
Manchmal muss die Benutzeragentenzeichenfolge von der Servervariablen und nicht vom Javascript-Navigatorobjekt gelesen werden.
Vergleichen Sie die Unterschiede:
ASP-Klassiker, IE11
Client-Javascript, navigator.userAgent: " Mozilla / 5.0 (kompatibel; MSIE 9.0; Windows NT 6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BOIE9; ENUS) "
Server-ASP, Request.ServerVariables ("HTTP_USER_AGENT"): " Mozilla / 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; BOIE9; ENUS; rv: 11.0) wie Gecko "
ASP classic, IE11-Kompatibilitätsmodus :
Client-Javascript, navigator.userAgent: " Mozilla / 5.0 (kompatibel; MSIE 9.0; Windows NT 6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BOIE9; ENUS)) "
Server-ASP, Request.ServerVariables ("HTTP_USER_AGENT"): " Mozilla / 4.0 (kompatibel; MSIE 7.0; Windows NT 6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET 3.0.30729 CLR; Media Center PC 6.0; .NET4.0C; .NET4.0E; BOIE9; ENUS) "
quelle
Von https://stackoverflow.com/a/29288153/2879498
Angenommen, Sie haben ein verstecktes Element mit der ID-Kompatibilitätswarnung:
Javascript mit jQuery:
Erkennung und Warnungen, Ihre erste und letzte Verteidigungslinie gegen die Kompatibilitätshölle.
quelle