在<base />标记(Firefox上的SVG)的上下文中引用本地ID

时间:2016-01-08 23:25:14

标签: html svg

我的问题发生在使用SVG的Win7上的当前Firefox上(这可能与实际问题不太相关):

`     
      

<head>  
<!-- base href="http://127.0.0.1/package/index.php" /-->  
</head>  

<body>  

<svg height="150px" width="400px">  

<defs>  
<linearGradient id="grad1" x1="0%" y1="0%" x2="0%" y2="100%">  
<stop offset="0%" style="stop-color:rgb(120,120,120);stop-opacity:1" />  
<stop offset="100%" style="stop-color:rgb(40,40,40);stop-opacity:1" />  
</linearGradient>  
</defs>

<rect x="225" y="30" width="80" height="28" fill="url(#grad1)"/>  
</svg>  
</body>  
</html>  

` 梯度由ID(grad1)标识,并由rect-tag引用。只要如上所述注释掉base-tag,这就可以正常工作。一旦base-tag被释放,我漂亮的矩形就会消失;可能是因为ID附加到基本标记中定义的URL。当发生这种情况时,Firefox似乎会额外往返服务器。

我的问题是,此页面保存在有时包含base-tag的包中,有时则不包含。如果不修改其他软件(我不想做),我似乎没有太多的控制权。所以我的问题是:我怎样才能&#34;锚定&#34;对本地文件中ID的引用,使它们不依赖于base-tag的存在?

1 个答案:

答案 0 :(得分:2)

如果您的<base>元素引用其他页面,则FF行为是正确的。

相对<funcIRI>应该被理解为url(<currentURI>#element) <base>元素确实将文档的currentURI更改为其href属性中的一个。

因此,如果您有权访问svg标记,那么可能的解决方案是使用<funcIRI>url(://path/to/your/page.php#element)中的绝对路径。
这样,基本元素不会对您使用的<funcIRI>产生任何影响。

此外,如果php响应的cache-control标头设置为no-cache,则可能会出现问题,这可能会使浏览器始终向服务器发送新请求。