我的问题发生在使用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
,您可能会遇到问题,这可能会使浏览器始终向服务器发送新请求。