为什么SVG中的同一文档引用受HTML <base />标记的影响?

时间:2011-11-26 03:04:43

标签: svg uri fragment-identifier

我有一个带有<base>标记的HTML页面,也包含SVG。然后SVG中的相同文档引用如下所示:

<html>
  <head>
    <base href="http://my/server/basedir">
  </head>
  <body>
    <svg>
      <g>
        <path d="M100,100 L150,150" id="path"/>
        <text>
          <textpath xlink:href="#path"/>
        </text>
      </g>
    </svg>
  </body>
</html>

xlink:href="#path"引用无法解析。没有HTML base元素,这可以正常工作。如果我使用绝对IRI后跟片段标识符替换href元素上的textpath属性,它也可以工作。

在我看来,SVG应该以不同的方式处理同一文档的IRI并且独立于HTML base。在http://www.w3.org/TR/xmlbase/#same-document中,它说“取消引用相同文档引用是专门处理的。”,虽然在xml:base的上下文中被授予。顺便说一下,我在xml:base元素上添加了svg,希望覆盖HTML base设置无法弄清楚如何使其发挥作用。

1 个答案:

答案 0 :(得分:0)

案例1:没有xml:base

适用于IE(Edge),Chrome,但不适用于Firefox。

<html>
  <head>
    <base href="http://my/server/basedir">
  </head>
  <body>
    <svg width="300" height="300" xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink">
      <g>
        <path d="M100,100 L150,150" id="path"/>
        <text>
          <textpath xlink:href="#path">Hello</textpath>
        </text>
      </g>
    </svg>
  </body>
</html>

案例2:xml:base

适用于IE(Edge),Chrome,Firefox。

如果此网页网址为http://my/thisfile.htm,则在svg标记或文字路径标记上设置xml:base="http://my/thisfile.htm"

<html>
  <head>
    <base href="http://my/server/basedir">
  </head>
  <body>
    <svg width="300" height="300" xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xml:base="http://my/thisfile.htm">
      <g>
        <path d="M100,100 L150,150" id="path"/>
        <text>
          <textpath xlink:href="#path">Hello</textpath>
        </text>
      </g>
    </svg>
  </body>
</html>