Jak sprawdzić, czy przeglądarka jest w trybie „dziwactw”?


130

Załóżmy, że masz stronę ze stosunkowo ścisłym typem dokumentu i znacznikami HTML, które są dość bliskie zgodności, ale być może brakuje na kilka głupich sposobów, być może z powodu zawartości użytkownika, na którą nie masz kontroli ... powiedzmy, że pracujesz nad treścią system zarządzania lub motyw systemu zarządzania treścią, w którym kontrolujesz podstawową strukturę i potrzebujesz trochę javascript, ale nie jesteś odpowiedzialny za wszystko inne, co znajduje się na stronach.

Jak możesz stwierdzić (lub: co to określi), kiedy przeglądarka zdecyduje się przejść w tryb „dziwactw” zamiast używać silnika bardziej zgodnego ze standardami?

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, aby to wymusić, czy też masz jakąś swobodę?

Odpowiedzi:


159

W Firefoksie i Operze możesz określić, czy Twoja przeglądarka jest w „trybie dziwactw”, sprawdzając informacje o stronie.

Użycie document.compatModepowie Ci tryb, w którym pracujesz w większości przeglądarek.

W przeglądarce Chrome, Safari i IE uruchom ten skrypt javascript na pasku adresu:

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

(pamiętaj, że javascript:po wklejeniu do paska adresu musisz ponownie wpisać tę część ze względu na ostatnie zmiany zabezpieczeń)


W IE jest jeszcze jedna potencjalna wartość, na którą natknąłem się, wymuszając na starej stronie tryb „EDGE”. Wartość to „BackCompat”
Greg Woods

Dostałem również BackCompat w Chrome, ustawiając DOCTYPE na coś całkowicie nieprawidłowego. Zgodnie z kodem w tej odpowiedzi, jeśli wartość jest inna niż CSS1Compat, jest w trybie dziwactw. Czy to prawda? Jakie są wszystkie możliwe wartości?
still_dreaming_1

Najwyraźniej BackCompatible jest standardową wartością dla trybu "dziwactwa" / "zgodności". Istnieją tylko 2 wartości: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

Ponieważ możesz zapytać o 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.');

11

Pełna odpowiedź na Twoje konkretne pytanie: „Czy wystarczy jeden błąd, aby go wymusić, czy masz jakąś swobodę?”. jest to, że zależy to całkowicie 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 dziwactwa w IE 6 i 7, mimo że tak naprawdę nie jest błędem (po prostu rzucają całkowite wahanie, gdy pierwsza linia pliku nie jest deklaracją). Krótką listę typów / dziwactw można znaleźć tutaj

Spróbuj umieścić następujący wiersz w kodzie HTML do testów (bardzo źle zachowuje się javascript, które tu przekazuję - przepraszam ... upewnij się, że to nigdy nie zostanie opublikowane :)

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

Dzięki za tester javascript, ponieważ moje pierwsze dwie próby wyjścia z trybu dziwactw nie zadziałały.
Noumenon,

css1compat! = tryb dziwactwa?
Mike Cole


3

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


2

Jeśli poprawnie rozumiem tryb dziwactw, strona, która nie jest sprawdzana pod kątem zadeklarowanego typu dokumentu, nie wystarczy, aby uruchomić tryb dziwactw. Po prostu nie wyświetli się poprawnie.

Najlepsze źródło informacji, które znalazłem, do określenia, jak różne przeglądarki obsługują każdy typ dokumentu, znajduje się tutaj .


2

W przeglądarce Firefox z dodatkiem Web Developer Toolbar możesz spojrzeć na trzy ikony po prawej stronie paska. Pierwszy z lewej mówi ci, w jakim trybie jesteś.


2

W IE zobaczysz to w narzędziach programistycznych (naciśnięcie F12), mówi to w menu: Tryb dokumentu: ... I możesz tam również wymusić inny tryb.


To mija się z celem pytania. To nie pomaga w pisaniu javascript, który wykonuje jedną ścieżkę w trybie dziwactw i inną ścieżkę w trybie standardów.
Joel Coehoorn

Właściwie nie pytałeś, jak to zrobić w Javascript, ale jak dowiedzieć się, jakiego trybu używa przeglądarka. W każdym razie, nawet jeśli nie miałeś tego na myśli, może to pomóc innym, którzy go szukają, sam musiałem wiedzieć, jak to wiedzieć w Firefoksie i dotarłem do tego pytania.
Ronen Festinger

@JoelCoehoorn Problem polega na tym, że nigdy nie wyjaśniłeś, czym jest „stosunkowo surowy typ dokumentu”!
Pan Lister

0

na stronie html5 wpisz „ <!DOCTYPE html>” początek strony może zmienić się na document.compatMode = 'CSS1Compat'

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.