Как сказать, если браузер находится в режиме" причуды"?
предположим, что у вас есть страница с относительно строгим типом doctype и разметкой HTML, которая довольно близка к совместимой, но, возможно, пропускает несколько глупых способов, возможно, из-за пользовательского контента, который находится вне вашего контроля... скажем, вы работаете над системой управления контентом или темой для системы управления контентом, где вы контролируете некоторую базовую структуру и нуждаетесь в javascript, но вы не несете ответственности за все остальное, что входит в страницы.
Как вы можете сказать (или: что определит) когда браузер решит перейти в режим" причуды", а не использовать его более совместимый со стандартами движок?
Я ищу ответы для каждого из основных браузеров, так как IE, Chrome, Safari и Firefox, конечно же, будут обрабатывать это по-разному. Одной ошибки достаточно, чтобы заставить его или у вас есть некоторая свобода?
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 с добавлением панели инструментов веб-разработчика вы можете посмотреть на три значка справа от панели. Самый левый говорит вам, в каком режиме вы находитесь.