在标签的上下文中引用本地 ID <BASE> (Firefox 上的 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 引用。只要像上面一样注释掉基本标签,就可以正常工作。一旦释放了基本标签,我漂亮的矩形就会消失;大概是因为 ID 附加到基本标记中定义的 URL。当这种情况发生时,Firefox似乎会额外往返服务器。

我的问题是,此页面保存在一个包中,有时包含基本标签,有时不包含。如果不修改其他软件(我不想这样做(,我似乎无法控制它,所以我的问题是:我如何在本地文件中"锚定"对 ID 的引用,以便它们独立于基本标签的存在?

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

相对<funcIRI>应读作url(<currentURI>#element)
<base> 元素确实会将文档的currentURI更改为其 href 属性中设置的。

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

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

最新更新