Як визначити, чи переглядач перебуває в режимі "диваків"?


128

Припустимо, у вас є сторінка з відносно суворим доктрипом та розміткою HTML, яка досить близька до сумісних, але, можливо, промахується кількома дурними способами, можливо, через вміст користувача, який не контролюється вами ... скажімо, ви працюєте над вмістом система управління або тема для системи управління контентом, де ви керуєте деякою базовою структурою і вам потрібен javascript, але ви не відповідаєте за все інше, що переходить на сторінки.

Як ви можете сказати (або: що буде визначати), коли браузер вирішить перейти в режим «диваків», а не використовувати двигун, який відповідає стандартам?

Я шукаю відповіді для кожного з основних веб-переглядачів, оскільки IE, Chrome, Safari і Firefox, звичайно, усі вирішуватимуть це по-різному. Чи достатньо однієї помилки, щоб змусити її чи у вас є деяка свобода руху?

Відповіді:


159

У Firefox та Opera ви можете визначити, чи переглядає ваш браузер в "режимі диваків", перевіривши інформацію про сторінку.

Використовуючи document.compatMode, підкаже, у якому режимі ви перебуваєте у більшості браузерів.

У Chrome, Safari та IE запустіть цей javascript у адресному рядку:

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

(зауважте, що вам потрібно буде ввести javascript:частину після вставки в адресний рядок через нещодавні зміни безпеки)


В IE є ще одне потенційне значення, на яке я натрапив, коли виводив стару сторінку в режим "EDGE". Значення було "BackCompat"
Грег Вудс

Я також отримав BackCompat в Chrome, коли встановлював DOCTYPE на щось абсолютно недійсне. Згідно з кодом у цій відповіді, якщо значення є чимось іншим, ніж CSS1Compat, воно знаходиться в режимі диваків. Це справді правда? Які всі можливі значення?
still_dreaming_1

Мабуть, BackCompatible - це стандартне значення для режиму "химерності" / "сумісності". Є лише 2 значення: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

Оскільки ви можете запитувати режим візуалізації в JavaScript, ви можете мати закладку, яка підкаже, у якому режимі візуалізації використовується сторінка.

Я знайшов цю закладку в режимі візуалізації, яка добре працює для мене:

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

11

Повна відповідь на ваш конкретний конкретний питання "Чи достатньо однієї помилки, щоб змусити її чи у вас є деяка свобода дії?" полягає в тому, що це повністю залежить від помилки. Наприклад,

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

буде застосовувати режим примх в IE 6 і 7, незважаючи на те, що вони насправді не є помилкою (вони просто кидають загальний хит, коли перший рядок файлу не є декларацією). Швидкий список типів / примх можна знайти тут

Спробуйте дотримуватися наступного рядка у своєму HTML для тестування (дуже погано поводиться JavaScript, я передаю тут - вибачте ... переконайтеся, що це ніколи не виходить на екран :)

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

Дякую за тестер JavaScript, тому що перші перші мої спроби вийти з режиму диваків не спрацювали.
Номенон

css1compat! = динамічний режим?
Майк Коул

4

Відповідно до http://www.quirksmode.org/css/quirksmode.html : "Проблема полягала в тому, що деякі сторінки, написані в режимі дивовижностей, мали доктіпи. Тому кожен браузер має власний список з доктіптами, які викликають режим примх. Дивіться цей браузер порівняльна діаграма для огляду цих списків: http://hsivonen.iki.fi/doctype/ "

Сподіваюся, це допомагає


3

Якщо ви скажете IE, що він повинен бути суворим (через doctype), він не змінить свою думку на півдорозі сторінки.


2

Якщо я правильно розумію режим примх, сторінка, яка не підтверджує свою заявлену доктрипу, недостатня для запуску режиму примх. Він просто не відобразиться правильно.

Найкращий ресурс, який я знайшов для визначення того, як різні браузери обробляють кожну доктрипу, є тут .


2

Для додавання Firefox із панеллю інструментів веб-розробників ви можете переглянути трійку піктограм праворуч від панелі. Край лівий розповідає, в якому режимі ви перебуваєте.


2

У IE ви побачите це в інструментах для розробників (натискаючи F12), він говорить про це в меню: Режим документа: ... І ви також можете застосувати інший режим там.


У цьому пропущено суть питання. Це не допоможе вам написати javascript, який виконує вниз один шлях для режиму примх, а інший шлях для стандартного режиму.
Joel Coehoorn

Насправді ви не питали, як це зробити в Javascript, але як знати, в якому режимі використовується браузер. У будь-якому випадку, навіть якщо ви цього не мали на увазі, це може допомогти іншим, хто це шукає, мені самому потрібно було знати, як це знати у Firefox, і я дійшов до цього питання.
Ронен Фестінгер

@JoelCoehoorn Актуальною проблемою є те, що ти ніколи не пояснював, що таке "відносно суворий вчення"!
Містер Лістер

0

на сторінці html5 напишіть " <!DOCTYPE html>" початок зі сторінки може змінитися на document.compatMode = "CSS1Compat"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.