用户代理应如何处理无法识别的HTML元素?

Chr*_*rna 7 html standards w3c

我试图在W3C HTML规范中找到答案,但到目前为止还没有运气.

例如,如果我有以下HTML代码:

<body>
    <p>
        <foo>bar</foo>
    </p>
</body>
Run Code Online (Sandbox Code Playgroud)

W3C是否指定用户代理应如何处理此问题?例如,"foo"元素应该被完全忽略吗?是否应忽略"foo"元素但解析内容"bar"?

此外,这样做甚至"合法"吗?

编辑:各位的一些优秀答案!我完全同意嵌入通用XML是不好的做法,除非您可以完全控制用户将使用哪个浏览器.如果要制作这样的标记,我对于实际会发生或将要发生的事情感到非常好奇:-)

And*_*y E 5

HTML规范没有多说,除了:

HTMLUnknownElement接口必须用于未由此规范(或其他适用规范)定义的HTML元素.

这可以通过控制台中的以下JavaScript代码在符合标准的浏览器中进行验证:

Object.prototype.toString.call(document.createElement("foo"));
//-> "[object HTMLUnknownElement]"
Run Code Online (Sandbox Code Playgroud)

但是,某些浏览器要么还没有遵循此规范.例如,Chrome 13给出[object HTMLElement],IE 8给出[object HTMLGenericElement](IE 9是正确的).

据我所知,所有浏览器都将解析<foo>为元素,但默认样式和行为不保证是相同的.在哪里HTMLUnknownElement实现并遵循规范,它应该直接从,HTMLElement并因此具有在其他元素上找到的许多默认属性.

请注意,当您的标记中包含非标准元素时,您的HTML将无法验证.还值得一提的是,搜索引擎爬虫,屏幕阅读器和其他软件将无法从这些元素中提取语义含义.

进一步阅读:


Alo*_*hci 3

来自 @Andy E 的一些极好的建议。这只是一些附加内容。

HTML5 草案确实定义了如何解析未知元素,但是,它显然并不简单。要查看规则,请参阅http://dev.w3.org/html5/spec/tree-construction.html

请注意,第一个使用这些规则的 Firefox 版本是 FireFox 4,第一个使用这些规则的 IE 版本是 IE 10。旧版本有许多不同且通常非常奇怪的行为。

HTML 没有“合法性”的概念,只有有效性或符合标准的概念。您可以自由决定是否希望您的页面符合任何特定标准。不存在符合任意命名元素使用的 HTML W3C 标准。

通常建议使您的 HTML 符合规范,以避免浏览器和您尚未测试的其他 HTML 使用方出现不可预测的错误。