Как определить, находится ли браузер в & # 8220; quirks & # 8221; Режим?

StackOverflow https://stackoverflow.com/questions/627097

  •  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'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top