Почему ссылка на тот же документ в SVG зависит от тега HTML <base>? - PullRequest
6 голосов
/ 26 ноября 2011

У меня есть HTML-страница с тегом <base>, также содержащая 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.Это также работает, если я заменил атрибут href в элементе textpath абсолютным IRI, за которым следует идентификатор фрагмента.

Мне кажется, что SVG должен относиться к IRI одного и того же документа по-разному и независимо отHTML basehttp://www.w3.org/TR/xmlbase/#same-document говорится, что «Разыменование ссылок на один и тот же документ обрабатывается специально.», Хотя и в контексте xml:base.Кстати, я играл с xml:base на элементе svg в надежде переопределить настройку HTML base, так как не мог понять, как это сделать.

1 Ответ

0 голосов
/ 08 декабря 2015

Случай 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.

Если URL этой страницы равен http://my/thisfile.htm, тогда установите xml:base="http://my/thisfile.htm" в теге svg или textpath.

<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>
...