#html #browser #html-parsing
#HTML #браузер #html-синтаксический анализ
Вопрос:
Гарантируют ли типы документов HTML формальный синтаксический анализ?
Например, если я использую определенный тип документа, а затем создаю действительно плохой HTML, заставит ли это браузер вернуться в режим Quirks или гарантировать синтаксический анализ с использованием doctype?
РЕДАКТИРОВАТЬ: Это также включает поведение CSS.
Ответ №1:
Гарантируют ли типы документов HTML формальный синтаксический анализ?
Нет.
Вам будет сложно найти браузер, который будет выполнять синтаксический анализ с использованием правил SGML при любых обстоятельствах.
Content-type XHTML запускает в некоторых браузерах синтаксический анализ с использованием правил XML.
Большинство браузеров будут использовать свой собственный синтаксический анализатор tag soup или алгоритм HTML 5 для любого текстового / html-документа.
Например, если я использую определенный тип документа, а затем создаю действительно плохой HTML, заставит ли это браузер вернуться в режим Quirks или гарантировать синтаксический анализ с использованием doctype?
Режим Quirks имеет очень мало общего с синтаксическим анализом. В основном речь идет о том, как интерпретируется CSS.
Однако выбор между режимами Quirks / Standards / Almost Standards / etc почти полностью осуществляется типом документа. Исключение составляют MIME-тип XHTML (который переводит некоторые браузеры в стандартный режим, независимо от типа документа) и (в случае MSIE) HTTP-заголовки и <meta>
данные, совместимые с X-UA.
Ответ №2:
До тех пор, пока doctype является признанным допустимым типом документа, тогда да, вам должно быть гарантировано, что вы находитесь в режиме стандартов, а не в режиме причуд.
Режим Quirks предназначен не для рендеринга HTML-кода плохого качества; он существует, потому что это был единственный режим рендеринга для старых браузеров, таких как IE5, а когда появились более новые браузеры (IE6), они хотели поддерживать режим новых стандартов, но также должны были быть обратно совместимы.
Эти старые браузеры не знали о типах документов, и поэтому создателям браузеров пришла в голову идея сказать, что если вы указали тип документа, вы, должно быть, ожидаете перехода в более новый браузер и, следовательно, ожидаете стандартного режима.
Сказав все это, если у вас некачественный HTML-код, на самом деле не будет иметь значения, находитесь ли вы в режиме стандартов или в режиме quirks — браузеру все равно придется решать, что делать с вашим супом тегов, и вы, вероятно, получите разные результаты в разных браузерах, независимо от режима рендеринга.