Как определить, находится ли браузер в & # 8220; quirks & # 8221; Режим?
-
06-07-2019 - |
Вопрос
Предположим, у вас есть страница с относительно строгим форматом документа и HTML-разметкой, которая довольно близка к совместимости, но, возможно, пропускает ее несколькими глупыми способами, возможно, из-за пользовательского контента, который находится вне вашего контроля ... скажем, вы работаете в системе управления контентом или в теме для системы управления контентом, где вы управляете некоторой базовой структурой и нуждаетесь в некотором JavaScript, но не несете ответственности за все остальное, что входит в страницы.
Как вы можете сказать (или: что будет определять), когда браузер решит перейти к " quirks " режим, а не использовать его более соответствует стандартам двигателя? Р>
Я ищу ответы для каждого из основных браузеров, поскольку IE, Chrome, Safari и Firefox, разумеется, будут работать по-разному. Достаточно ли одной единственной ошибки, чтобы заставить ее или у вас есть некоторая свобода?
Решение
В Firefox и Opera вы можете определить, находится ли ваш браузер в режиме "quirks" " проверяя информацию о странице.
Используя document.compatMode
, вы узнаете, в каком режиме вы находитесь в большинстве браузеров.
В Chrome, Safari и IE запустите этот javascript в адресной строке:
javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')
(обратите внимание, что вам потребуется повторно ввести часть javascript:
после вставки в адресную строку из-за недавних изменений в системе безопасности)
Другие советы
Поскольку вы можете запрашивать режим рендеринга в JavaScript, у вас может быть Bookmarklet который скажет вам, какой режим рендеринга использует страница.
Я обнаружил этот букмарклет в режиме рендеринга который хорошо работает для меня:
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">
активирует режим причуд в IE 6 & amp; 7, несмотря на то, что не выдает ошибку (они просто генерируют общее колебание, когда самая первая строка файла не является объявлением). Краткий список типов / причуд можно найти здесь
Попробуйте вставить следующую строку в ваш HTML для тестирования (очень плохой javascript, я говорю здесь - извините ... убедитесь, что он никогда не будет запущен :))
<a href="javascript:alert(document.compatMode);">What mode am I?</a>
Согласно http://www.quirksmode.org/css/quirksmode.html:
" Проблема заключалась в том, что некоторые страницы, написанные в режиме причуд, имели типы документов. Поэтому у каждого браузера есть свой список с типами документов, которые активируют режим причуд. См. Эту таблицу сравнения браузеров для обзора этих списков: http://hsivonen.iki.fi/doctype/ а> & Quot; р>
Надеюсь, это поможет
Если вы скажете IE, что он должен быть строгим (через doctype), он не передумает в середине страницы.
Если я правильно понимаю режим причуд, страницы, которая не проверяется на соответствие объявленному типу документа, недостаточно для запуска режима причуд. Это просто не будет отображаться правильно.
Лучший ресурс, который я нашел для определения того, как разные браузеры обрабатывают каждый тип документа, здесь . р>
Для Firefox с добавленной панелью инструментов веб-разработчика вы можете взглянуть на три иконки в правой части панели. Крайний слева говорит вам, в каком режиме вы находитесь.
В IE вы увидите это в инструментах разработчика (нажав F12), он говорит это в меню: Режим документа: ... И вы также можете использовать другой режим.
на странице html5 напишите " <! DOCTYPE html >
" начать со страницы можно изменить на
document.compatMode = 'CSS1Compat'