我的问题发生在使用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的存在?
答案 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
,则可能会出现问题,这可能会使浏览器始终向服务器发送新请求。