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


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

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

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

9 123

9 ответов:

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

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

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

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

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

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

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

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

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

<!-- 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, несмотря на то, что на самом деле не ebing ошибка (они просто бросают общую шаткость, когда самая первая строка файла не является объявлением). Быстрый список типов / причуд можно найти здесь

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

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

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

надеюсь, что это помогает

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

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

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

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

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

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