HTML属性命名空间

时间:2012-11-21 21:56:53

标签: 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>

当我检查属性栏:Chrome或Firefox调试器(或Javascript)中的xwidth时,我希望找到该属性的namespaceURI为“http://www.foo.com/schemas/bar”,不幸的是它是空的。

问题似乎是解析元素/ attrs的程序化构造。在Javascript中,我可以构造我想要的东西,但是任何解析,加载上面的元素.innerHTML =“”,都会产生一个带有null命名空间的属性。

有关如何使属性的namespaceURI正确的任何想法?

1 个答案:

答案 0 :(得分:2)

任意前缀的命名空间解析是XML功能,而不是HTML功能。因此,如果您使用application/xhtml+xml mime类型为页面提供服务,则会导致浏览器使用XML解析器,并且您的命名空间会按照您的意图解析。

浏览器的HTML解析器根本不支持前缀/命名空间解析,除非在解析嵌入式SVG和MathML时,其中非常小的属性列表被“神奇地”转换,例如xml:langxlink:href。永远不支持您自己的命名空间。

HTML文档中的

innerHTML的工作方式与HTML解析器完全相同。

(特别注意IE的HTML解析器,它有自己的关于如何处理名称中冒号的元素和属性的概念。虽然你仍然无法获得namespaceURI的值)

所以你唯一的选择是:(i)使用application/xhtml+xml; (ii)使用脚本构建命名空间属性;或(iii)不使用命名空间属性。