3

我有一个简单的 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)中检查属性 bar:xwidth 时,我希望发现该属性的 namespaceURI 将是“http://www.foo.com/schemas/bar”,不幸的是它是无效的。

问题似乎是元素/属性的解析与编程构造。在 Javascript 中,我可以构建我想要的东西,但是任何解析、加载上述内容或 element.innerHTML = "" 都会产生一个带有空命名空间的属性。

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

4

1 回答 1

5

任意前缀的命名空间解析是一种 XML 特性,而不是 HTML 特性。因此,如果您使用application/xhtml+xmlmime 类型为您的页面提供服务,这将导致浏览器使用 XML 解析器,并且您的命名空间将按照您的意图进行解析。

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

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

(尤其要注意 IE 的 HTML 解析器,它对如何处理名称中带有冒号的元素和属性有自己的概念。不过,您仍然不会获得 namespaceURI 的值)

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

于 2012-11-22T01:16:56.330 回答