Jak sprawdzić, czy przeglądarka jest w trybie "dziwactwa"?

Załóżmy, że masz stronę ze stosunkowo ścisłymi znacznikami doctype i HTML, które są dość bliskie zgodności, ale być może chybiasz na kilka głupich sposobów, być może z powodu Treści Użytkownika, które są poza Twoją kontrolą... Załóżmy, że pracujesz nad systemem zarządzania treścią lub motywem dla systemu zarządzania treścią, w którym kontrolujesz podstawową strukturę i potrzebujesz trochę javascript, ale nie jesteś odpowiedzialny za wszystko inne, co trafia do stron.

Jak można powiedzieć (lub: co będzie określić) gdy przeglądarka zdecyduje się przejść w tryb" dziwactwa " zamiast używać to jest bardziej zgodny ze standardami silnik?

Szukam odpowiedzi dla każdej z głównych przeglądarek, ponieważ IE, Chrome, Safari i Firefox będą oczywiście obsługiwać to inaczej. Czy wystarczy jeden błąd, by go wymusić, czy masz trochę swobody?

Author: Joel Coehoorn, 2009-03-09

9 answers

W Firefox i Opera możesz określić, czy twoja przeglądarka jest w "trybie dziwactwa", sprawdzając informacje o stronie.

Użycie document.compatMode powie Ci, w jakim trybie jesteś w większości przeglądarek.

W Chrome, Safari i IE Uruchom ten javascript w pasku adresu:

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

(pamiętaj, że po wklejeniu do paska adresu będziesz musiał ponownie wpisać javascript:, ze względu na ostatnie zmiany zabezpieczeń)

 149
Author: Chris Ballance,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-01 21:09:48

Ponieważ możesz odpytywać tryb renderowania w JavaScript, możesz mieć Bookmarklet , który powie Ci, jakiego trybu renderowania używa strona.

Znalazłem Ten bookmarklet trybu renderowania który działa dobrze dla mnie:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');
 19
Author: Dave Webb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-30 09:53:05

Pełna odpowiedź na twoje konkretne pytanie " czy wystarczy jeden błąd, aby go wymusić, czy masz jakąś swobodę?'jest to, że to całkowicie zależy od błędu. Na przykład,

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

Wymusi tryb quirks w IE 6 i 7 mimo, że tak naprawdę nie jest to błąd (po prostu rzucają totalnie chwiejnie, gdy pierwsza linia pliku nie jest deklaracją). Krótka lista typów / dziwactw znajduje się tutaj

Spróbuj wkleić następujący wiersz w HTML do testowania (bardzo źle javascript zachowuję się tutaj-przepraszam...upewnij się, że to nigdy nie przejdzie na żywo:)

<a href="javascript:alert(document.compatMode);">What mode am I?</a>
 11
Author: Steerpike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-09 17:23:24

Zgodnie z http://www.quirksmode.org/css/quirksmode.html : "Problem polegał na tym, że niektóre strony napisane w trybie quirks miały doctypes. Dlatego każda przeglądarka ma własną listę z typami dokumentów, które wyzwalają tryb dziwactwa. Zobacz tabelę porównawczą przeglądarek, aby uzyskać przegląd tych list: http://hsivonen.iki.fi/doctype/"

Hope this helps

 4
Author: Sébastien Nussbaumer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-09 17:06:56

Jeśli powiesz IE, że powinien być ścisły (poprzez doctype), to nie zmieni zdania w połowie strony.

 3
Author: i_am_jorf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-09 17:02:58

Jeśli dobrze rozumiem tryb quirks, strona, która nie sprawdza się względem zadeklarowanego doctype, nie wystarczy, aby uruchomić tryb quirks. Po prostu nie wyświetli się poprawnie.

Najlepszym zasobem, jaki znalazłem do określenia, jak różne przeglądarki obsługują każdy doctype jest TUTAJ.

 2
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-09 17:23:30

W Firefoksie z dodatkiem paska narzędzi Web Developer Toolbar można spojrzeć na trzy ikony po prawej stronie paska. Po lewej stronie dowiesz się, w jakim trybie się znajdujesz.

 2
Author: Arieleo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-15 08:14:19

W IE zobaczysz go w narzędziach programistycznych (naciśnięcie klawisza F12), mówi to w menu: Tryb dokumentu:... Możesz też wymusić inny tryb.

 2
Author: Ronen Festinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-07 13:39:53

Na stronie html5 wpisz" <!DOCTYPE html> " początek strony można zmienić na dokument.compatMode= 'CSS1Compat'

 0
Author: Miro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-05 08:09:06