8

Ich entwickle eine Art JavaScript-Bibliothek. Und ich verursache das Problem, dass ich einige spezifische Probleme habe für: Browser: IE8/IE9 und Document Mode: IE7 Ich fand die Lösung, aber ich will es nicht in allen Situationen verwenden, und will es nur verwenden, wenn Ich habe die oben beschriebene Situation. Ich weiß, dass ich Browser erkennen kann unter Verwendung:So erhalten Sie den Browser "Document Mode"

return navigator.userAgent.toLowerCase().indexOf('MSIE 8') > -1; 

aber ich erkenne nur Browser-Version in einer solchen Art und Weise, aber nicht den Dokumentmodus, und ich will nicht meine Lösung verwenden, wenn ich zum Beispiel Browser Modus IE8 und Dokumentmodus IE 8. Gibt es eine Möglichkeit, den Seitendokumentmodus in IE zu erhalten? Danke im Voraus.

Antwort

27

Sie können document.documentMode verwenden, um genau zurückzugeben, welchen Dokumentmodus IE verwendet.

Das bedeutet, wenn Sie Ihren Browser-Modus auf IE9, aber Ihren Dokumentmodus auf IE8 gesetzt haben, wird document.documentMode == 8 zurückgegeben (während der userAgent-String immer noch als IE9 angezeigt wird). Dies ist besonders nützlich, wenn Ihr JS Styling-Änderungen enthält, da es der Dokumentmodus ist, der bestimmt, wie der IE eine Seite darstellt, nicht den Browser-Modus. Der Kompatibilitätsmodus ändert nur den Dokumentmodus (normalerweise IE7).

In den wenigen Fällen, ich brauche ich habe habe gerade so etwas wie dieses verwendet IE zu unterscheiden:

if (document.documentMode == 7) { 
    doSomethingIn.IE7_only; 
} else { 
    doSomething.everwhereElse; 
} 

Hoffnung, dass einige helfen.

+0

Kann ich Dokumentmodus einstellen.wie angenommen if (document.documentMode == 8) {setze document.documentmode auf irgendeinen Wert} –

+0

Leider kann man es nicht mit Javascript einstellen. Sie können jedoch das Meta-Tag x-ua-compatibility verwenden, um einen gewünschten IE-Modus anzugeben. Beachten Sie, dass es auf Legacy-Versionen von IE funktioniert (z. B. nicht IE11 +). Lesen Sie diese Informationen für weitere Informationen: http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx –

+2

Beachten Sie, dass 'document.documentMode' nur in IE8 + unterstützt wird. Ich brauche zusätzliche 'Feature-Erkennung', wenn Sie auf natives IE7-Rendering abzielen müssen. – WynandB

1

Ich weiß nicht, wie das Dokument Modus , zurückzuholen, aber es kann klug sein, das Problem auf eine einfachere Art und Weise zu lösen. Nehmen wir an, Sie wollten document.querySelector in Ihrem Skript verwenden. Das würde in IE8/Dokumentmodus IE7 Standards fehlschlagen. So eine zusätzliche Überprüfung für die Existenz von document.querySelector selbst wäre die Lösung:

return ~navigator.userAgent.toLowerCase().indexOf('MSIE 8') 
     && document.querySelector; //=> IE8 and Docmode IE7 => false 

einen Weg gefunden, für Dokument-Modus zu überprüfen: Verwenden Sie document.documentMode. Es gibt eine Ganzzahl (also 7 für IE7-Standards im Dokumentmodus), 5 für Quirks mode zurück. Es wird undefined für nicht IE Browser sein.

+0

Ja thx es ist eine gute Idee, aber ich habe nicht fehlgeschlagen von Javascript oder einige verpasste Funktion Ich habe nur ein anderes Verhalten der gleichen Funktionen in verschiedenen Dokument-Modus. Als weitere Möglichkeit, Ihre Lösung zu verwenden, kennen Sie vielleicht eine Funktion, die unter "DocumentMode IE7" nicht funktioniert. Wenn ich eine solche Funktion finde, kann ich damit den Dokumentmodus erkennen. – Mikhail

+0

Nun, 'document.querySelector' funktioniert nicht in docmode IE7;). Wie auch immer, eine hilfreiche IE-Dokument-Eigenschaft gefunden, siehe die aktualisierte Antwort. – KooiInc

+0

Beachten Sie, dass document.documentMode nur in IE8 + unterstützt wird. Sie benötigen daher eine zusätzliche Feature-Erkennung, wenn Sie das native IE7-Rendering als Ziel haben möchten. – WynandB