Как определить, находится ли браузер в режиме «причуд»? - PullRequest
125 голосов
/ 09 марта 2009

Предположим, у вас есть страница с относительно строгим форматом документа и разметкой HTML, которая довольно близка к совместимости, но, возможно, пропускает несколько глупых способов, возможно, из-за пользовательского контента, который находится вне вашего контроля ... скажем, вы работаете в системе управления контентом или в теме для системы управления контентом, где вы управляете некоторой базовой структурой и нуждаетесь в некотором JavaScript, но не несете ответственности за все остальное, что входит в страницы.

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

Я ищу ответы для каждого из основных браузеров, поскольку IE, Chrome, Safari и Firefox, конечно, все будут обрабатывать это по-разному. Достаточно ли одной единственной ошибки, чтобы вызвать ее, или у вас есть некоторая задержка?

Ответы [ 9 ]

153 голосов
/ 09 марта 2009

В Firefox и Opera вы можете определить, находится ли ваш браузер в «режиме причуд», проверив информацию о странице.

Используя document.compatMode, вы узнаете, в каком режиме находитесь большинство браузеров.

В Chrome, Safari и IE запустите этот javascript в адресной строке:

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

(обратите внимание, что вам потребуется повторно ввести часть javascript: после вставки в адресную строку из-за недавних изменений в системе безопасности)

19 голосов
/ 30 октября 2009

Поскольку вы можете запрашивать режим рендеринга в JavaScript, у вас может быть Bookmarklet , который сообщит вам, какой режим рендеринга использует страница.

Я нашел этот букмарклет в режиме рендеринга , который хорошо работает для меня:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');
11 голосов
/ 09 марта 2009

Полный ответ на ваш конкретный конкретный вопрос: «Достаточно ли одной единственной ошибки, чтобы ее вызвать, или у вас есть некоторая задержка?» является то, что это полностью зависит от ошибки. Например,

<!-- 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>
4 голосов
/ 09 марта 2009

Согласно http://www.quirksmode.org/css/quirksmode.html: «Проблема заключалась в том, что некоторые страницы, написанные в режиме причуд, имели типы документов. Поэтому каждый браузер имеет свой собственный список с типами документов, которые запускают режим причуд. См. Эту сравнительную таблицу браузера для обзора этих списков: http://hsivonen.iki.fi/doctype/"

Надеюсь, это поможет

3 голосов
/ 09 марта 2009

Если вы скажете IE, что он должен быть строгим (через doctype), он не передумает в середине страницы.

2 голосов
/ 07 августа 2013

В IE вы увидите это в инструментах разработчика (нажав F12), оно говорит это в меню: Режим документа: ... И вы также можете использовать другой режим там.

2 голосов
/ 15 июля 2011

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

2 голосов
/ 09 марта 2009

Если я правильно понимаю режим причуд, страницы, которая не проверяется на соответствие объявленному типу, недостаточно для запуска режима причуд. Это просто не будет отображаться правильно.

Лучший ресурс, который я нашел для определения того, как разные браузеры обрабатывают каждый тип документа, это здесь .

0 голосов
/ 05 марта 2013

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

...