Как пользовательские агенты должны обрабатывать нераспознанные элементы HTML? - PullRequest
7 голосов
/ 19 сентября 2011

Я пытался найти ответ на этот вопрос в спецификациях W3C HTML, но пока мне не повезло.

Например, если у меня есть следующий код HTML:

<body>
    <p>
        <foo>bar</foo>
    </p>
</body>

Указывает ли W3C, как пользовательский агент должен это обрабатывать?Например, следует ли полностью игнорировать элемент "foo"?Следует ли игнорировать элемент "foo", но анализировать "панель" содержимого?

Кроме того, даже "законно" ли это делать?

Редактировать: Некоторые отличныеответы от всех вас!Я полностью согласен с тем, что было бы плохой практикой встраивать общий XML, если, возможно, если у вас нет полного контроля над тем, какой браузер будут использовать ваши пользователи.Меня больше всего интересовало, что на самом деле произойдет или должно произойти, если такая разметка будет произведена: -)

Ответы [ 3 ]

5 голосов
/ 19 сентября 2011

Спецификация HTML ничего не говорит об этом, кроме :

Интерфейс HTMLUnknownElement должен использоваться для элементов HTML, которые не определены этой спецификацией (или другими применимыми спецификациями).

Это можно проверить в соответствующих браузерах, используя следующий код JavaScript в консоли:

Object.prototype.toString.call(document.createElement("foo"));
//-> "[object HTMLUnknownElement]"

Однако, некоторые браузеры либо не следуют здесь спецификации. Например, Chrome 13 дает [object HTMLElement], IE 8 дает [object HTMLGenericElement] (IE 9 правильный).

Насколько мне известно, все браузеры будут анализировать <foo> как элемент, но стили и поведение по умолчанию не гарантируют, что они будут одинаковыми. Там, где реализован HTMLUnknownElement и соблюдаются спецификации, он должен наследоваться непосредственно от HTMLElement и, следовательно, иметь многие свойства по умолчанию, найденные в других элементах.

Обратите внимание, что ваш HTML не будет проверяться, если у вас есть нестандартные элементы в разметке. Стоит также отметить, что сканеры поисковых систем, программы чтения с экрана и другое программное обеспечение не смогут извлечь смысловое значение из этих элементов.

Дополнительное чтение:

2 голосов
/ 19 сентября 2011

Несколько замечательных советов от @Andy E. Это всего лишь некоторые дополнения к этому.

Черновик HTML5 действительно определяет, как анализировать неизвестные элементы, однако он явно нетривиален.Чтобы увидеть правила, см. http://dev.w3.org/html5/spec/tree-construction.html

. Обратите внимание, что первая версия Firefox, использующая эти правила, - это FireFox 4, а первая версия IE, использующая правила, - это IE 10. Более старые версии имеют рядразличное и часто очень странное поведение.

В HTML нет понятия «законность», только действительность или соответствие стандарту.Вы можете сами решать, хотите ли вы, чтобы ваши страницы соответствовали какому-либо конкретному стандарту или нет.Не существует стандарта HTML W3C, в котором использование произвольно названных элементов соответствует.

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

2 голосов
/ 19 сентября 2011

«бар» обязательно должен быть визуализирован.Например, в элементе видео HTML5 содержимое элемента содержит запасной контент, который должен отображаться в старых браузерах именно по этой причине.Именно поэтому люди традиционно размещают комментарии вокруг объявлений стилей:

<style><!-- 
  (styling goes here)
--></style>

, чтобы скрыть информацию о стилях от браузеров до HTML 4.(Я думаю, что комментарии больше не считаются хорошей практикой.)

...