fre*_*rom 6 xhtml attributes namespaces
我有一个简单的 html 文档。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/2000/xmlns
xmlns:bar="http://www.foo.com/schemas/bar">
<head>
</head>
<body>
<img src="penguins.png" bar:xwidth="300"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我在 Chrome 或 Firefox 调试器(或 Javascript)中检查属性 bar:xwidth 时,我希望发现该属性的命名空间URI为“http://www.foo.com/schemas/bar”,不幸的是它是无效的。
问题似乎是元素/属性的解析与编程构造。在 Javascript 中,我可以构建我想要的内容,但是任何解析、加载上述内容或 element.innerHTML = "" 都会产生一个具有 null 命名空间的属性。
关于如何使属性的命名空间URI正确有什么想法吗?
任意前缀的名称空间解析是一项 XML 功能,而不是 HTML 功能。因此,如果您使用 mime 类型提供页面application/xhtml+xml
,这将导致浏览器使用 XML 解析器,并且您的命名空间将按照您的意图进行解析。
浏览器的 HTML 解析器根本不支持前缀/命名空间解析,除非解析嵌入的 SVG 和 MathML,其中一小部分属性被“神奇地”转换,例如xml:lang
和xlink:href
。您自己的命名空间永远不受支持。
innerHTML
HTML 文档中的工作方式与 HTML 解析器的工作方式完全相同。
(特别要注意 IE 的 HTML 解析器,它对于如何处理名称中带有冒号的元素和属性有自己的概念。尽管如此,您仍然无法获得 namespaceURI 的值)
所以你唯一的选择是:(i)使用application/xhtml+xml
;(ii) 使用脚本构建您的命名空间属性;或 (iii) 不要使用命名空间属性。