Wie erkennt man, ob sich ein Browser im "Macken" -Modus befindet?


128

Nehmen wir an, Sie haben eine Seite mit einem relativ strengen Doctype und HTML-Markup, die nahezu konform ist, aber möglicherweise auf ein paar alberne Arten fehlt, möglicherweise aufgrund von Benutzerinhalten, die außerhalb Ihrer Kontrolle liegen. Angenommen, Sie arbeiten an einem Inhalt Managementsystem oder ein Thema für ein Content-Management-System, bei dem Sie eine grundlegende Struktur steuern und Javascript benötigen, aber nicht für alles andere verantwortlich sind, was in Seiten eingeht.

Wie können Sie feststellen (oder: was wird bestimmen), wann der Browser beschließt, in den "Macken" -Modus zu wechseln, anstatt die standardkonformere Engine zu verwenden?

Ich suche nach Antworten für jeden der wichtigsten Browser, da IE, Chrome, Safari und Firefox dies natürlich alle unterschiedlich handhaben. Reicht ein einziger Fehler aus, um ihn zu erzwingen, oder haben Sie einen gewissen Spielraum?

Antworten:


159

In Firefox und Opera können Sie feststellen, ob sich Ihr Browser im "Mackenmodus" befindet, indem Sie die Seiteninformationen überprüfen.

Wenn Sie verwenden document.compatMode, erfahren Sie, in welchem ​​Modus Sie sich mit den meisten Browsern befinden.

Führen Sie in Chrome, Safari und IE dieses Javascript in der Adressleiste aus:

 javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')

(Beachten Sie, dass Sie den javascript:Teil nach dem Einfügen in Ihre Adressleiste aufgrund der jüngsten Sicherheitsänderungen erneut eingeben müssen.)


Es gibt einen weiteren potenziellen Wert im IE, auf den ich gestoßen bin, als ich eine alte Seite in den "EDGE" -Modus gezwungen habe. Der Wert war "BackCompat"
Greg Woods

Ich habe BackCompat auch in Chrome erhalten, als ich DOCTYPE auf etwas völlig Ungültiges gesetzt habe. Laut dem Code in dieser Antwort befindet sich der Wert, wenn er nicht CSS1Compat ist, im Mackenmodus. Stimmt das wirklich? Was sind alle möglichen Werte?
still_dreaming_1

Anscheinend ist BackCompatible der Standardwert für den Modus "Macken" / "Kompatibilität". Es gibt nur die 2 Werte: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

Da Sie den Rendermodus in JavaScript abfragen können, können Sie ein Lesezeichen erstellen, das Ihnen anzeigt, welchen Rendermodus eine Seite verwendet.

Ich habe dieses Lesezeichen für den Rendermodus gefunden, das für mich gut funktioniert:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');

11

Die vollständige Antwort auf Ihre aktuelle spezifische Frage: "Reicht ein einzelner Fehler aus, um ihn zu erzwingen, oder haben Sie einen gewissen Spielraum?" ist, dass es total auf den Fehler ankommt. Beispielsweise,

<!-- Comment -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Erzwingt den Quirks-Modus in IE 6 und 7, obwohl dies nicht wirklich ein Fehler ist (sie werfen nur ein totales Wackeln, wenn die allererste Zeile der Datei keine Deklaration ist). Eine kurze Liste der Typen / Macken finden Sie hier

Versuchen Sie, die folgende Zeile zum Testen in Ihren HTML-Code einzufügen (sehr schlechtes Javascript-Verhalten, das ich hier weitergebe - Entschuldigung ... stellen Sie sicher, dass dies niemals live geht :)

<a href="javascript:alert(document.compatMode);">What mode am I?</a>

Vielen Dank für den Javascript-Tester, da meine ersten beiden Versuche, dem Macken-Modus zu entkommen, nicht funktionierten.
Noumenon

css1compat! = Mackenmodus?
Mike Cole


3

Wenn Sie dem IE mitteilen, dass es streng sein soll (über doctype), ändert es seine Meinung nicht zur Hälfte der Seite.


2

Wenn ich den Mackenmodus richtig verstehe, reicht eine Seite, die nicht gegen den deklarierten Doctype validiert wird, nicht aus, um den Mackenmodus auszulösen. Es wird einfach nicht richtig angezeigt.

Die beste Ressource, die ich gefunden habe, um festzustellen, wie verschiedene Browser mit jedem Doctype umgehen, ist hier .


2

Für das Add-On Firefox mit Web Developer Toolbar können Sie sich die drei Symbole rechts in der Leiste ansehen. Ganz links sehen Sie, in welchem ​​Modus Sie sich befinden.


2

Im IE sehen Sie es in den Entwicklertools (drücken Sie F12), es steht im Menü: Dokumentmodus: ... und Sie können dort auch einen anderen Modus erzwingen.


Dies verfehlt den Punkt der Frage. Das hilft Ihnen nicht, Javascript zu schreiben, das einen Pfad für den Mackenmodus und einen anderen Pfad für den Standardmodus ausführt.
Joel Coehoorn

Eigentlich haben Sie nicht gefragt, wie es in Javascript geht, sondern wie man weiß, welchen Modus der Browser verwendet. Selbst wenn Sie es nicht so gemeint haben, kann es anderen helfen, die danach suchen. Ich selbst musste wissen, wie man es in Firefox kennt, und kam zu dieser Frage.
Ronen Festinger

@JoelCoehoorn Das eigentliche Problem ist, dass Sie nie erklärt haben, was ein "relativ strenger Doctype" ist!
Herr Lister

0

Schreiben Sie auf der HTML5-Seite " <!DOCTYPE html>" Start mit Seite kann sich in document.compatMode = 'CSS1Compat' ändern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.