Bagaimana cara mengetahui apakah browser dalam mode "quirks"?


128

Misalkan Anda memiliki halaman dengan doctype yang relatif ketat dan markup HTML yang cukup dekat dengan kepatuhan, tetapi mungkin meleset dalam beberapa cara konyol, mungkin karena konten pengguna yang di luar kendali Anda ... katakanlah Anda sedang mengerjakan suatu konten sistem manajemen atau tema untuk sistem manajemen konten tempat Anda mengontrol beberapa struktur dasar dan memerlukan javascript, tetapi Anda tidak bertanggung jawab atas semua hal lain yang masuk ke halaman.

Bagaimana Anda bisa tahu (atau: apa yang akan menentukan) kapan browser memutuskan untuk masuk ke mode "quirks" daripada menggunakannya lebih sesuai dengan standar mesin?

Saya mencari jawaban untuk masing-masing browser utama, karena IE, Chrome, Safari, dan Firefox tentu saja semua akan menangani hal itu secara berbeda. Apakah satu kesalahan saja cukup untuk memaksanya atau apakah Anda memiliki beberapa kelonggaran?

Jawaban:


159

Di Firefox dan Opera Anda dapat menentukan apakah browser Anda berada dalam "mode quirks" dengan memeriksa info halaman.

Menggunakan document.compatMode, akan memberi tahu Anda mode yang Anda gunakan dengan sebagian besar browser.

Di Chrome, Safari, dan IE , jalankan javascript ini di bilah alamat:

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

(perhatikan bahwa Anda harus mengetik ulang javascript:bagian setelah menempel ke bilah alamat Anda, karena perubahan keamanan baru-baru ini)


Ada nilai potensial lain di IE yang saya temui ketika memaksa halaman lama ke mode "EDGE". Nilainya adalah "BackCompat"
Greg Woods

Saya mendapat BackCompat di Chrome juga ketika mengatur DOCTYPE ke sesuatu yang sama sekali tidak valid. Menurut kode dalam jawaban ini, jika nilainya tidak lain dari CSS1Compat, itu dalam mode quirks. Benarkah itu benar? Apa semua nilai yang mungkin?
still_dreaming_1

Rupanya BackCompatible adalah nilai standar untuk mode "quirks" / "kompatibilitas". Hanya ada 2 nilai: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

Karena Anda dapat meminta mode render dalam JavaScript, Anda dapat memiliki Bookmarklet yang akan memberi tahu Anda mode render mana yang digunakan halaman.

Saya menemukan bookmarklet mode render ini yang berfungsi dengan baik untuk saya:

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

11

Jawaban lengkap untuk pertanyaan spesifik aktual Anda tentang 'Apakah satu kesalahan tunggal cukup untuk memaksanya atau apakah Anda memiliki beberapa kelonggaran?' adalah bahwa itu benar-benar tergantung pada kesalahan. Sebagai contoh,

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

akan memaksa mode quirks di IE 6 & 7 meskipun tidak benar-benar kesalahan (mereka hanya melempar goyangan total ketika baris pertama file bukan deklarasi). Daftar jenis / kebiasaan dapat ditemukan di sini

Coba pertahankan baris berikut dalam HTML Anda untuk pengujian (javascript yang sangat buruk sebelumnya saya sampaikan di sini - maaf ... pastikan ini tidak pernah berjalan :)

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

Terima kasih untuk penguji javascript, karena dua pertama saya mencoba untuk keluar dari mode kebiasaan tidak berfungsi.
Noumenon

css1compat! = mode quirks?
Mike Cole


3

Jika Anda memberi tahu IE bahwa itu harus ketat (melalui DOCTYPE) ia tidak akan berubah pikiran setengah halaman.


2

Jika saya memahami mode quirks dengan benar, halaman yang tidak memvalidasi terhadap doctype yang dideklarasikan tidak cukup untuk memicu mode quirks. Itu tidak akan ditampilkan dengan benar.

Sumber daya terbaik yang saya temukan untuk menentukan bagaimana browser yang berbeda menangani setiap dokumen di sini .


2

Untuk Firefox dengan menambahkan Web Developer Toolbar, Anda dapat melihat trio ikon di sebelah kanan bilah. Yang paling kiri memberi tahu Anda mode apa yang sedang Anda masuki.


2

Di IE Anda akan melihatnya di alat pengembang (menekan F12), ia mengatakannya di menu: Document Mode: ... Dan Anda juga dapat memaksa mode yang berbeda di sana.


Ini melewatkan inti pertanyaan. Itu tidak membantu Anda menulis javascript yang mengeksekusi satu jalur untuk mode quirks dan jalur yang berbeda untuk mode standar.
Joel Coehoorn

Sebenarnya Anda tidak bertanya bagaimana melakukannya dalam Javascript tetapi bagaimana cara mengetahui mode apa yang digunakan browser. Bagaimanapun, bahkan jika Anda tidak bersungguh-sungguh, itu dapat membantu orang lain yang mencarinya, saya sendiri perlu tahu bagaimana mengetahuinya di Firefox dan sampai pada pertanyaan ini.
Ronen Festinger

@ JoelCoehoorn Masalah sebenarnya adalah Anda tidak pernah menjelaskan apa itu "DOCTYPE yang relatif ketat" itu!
Tn. Lister

0

di halaman html5, tulis " <!DOCTYPE html>" mulai dengan halaman dapat berubah ke document.compatMode = 'CSS1Compat'

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.