Как узнать, находится ли браузер в режиме "quirks"?

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

заставит режим quirks в IE 6 и 7, несмотря на то, что он действительно не испугает ошибку (они просто бросают полный шаткий, когда самая первая строка файла не является объявлением). Быстрый список типов /quirks можно найти здесь

Попробуйте придерживаться следующей строки в своем HTML для тестирования (очень плохой javascript, который мне нравится, я прохожу сюда - извините... убедитесь, что это никогда не выйдет вживую:)

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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