【发布时间】:2015-09-29 17:46:07
【问题描述】:
我知道有很多方法可以在 HTML 中使用 SVG 精灵。我对这个日期的偏好是使用类似
<div class="container">
<svg class="icon">
<title>Icon Title</title>
<use xlink:href="/svg/sprite.svg#icon"/>
</svg>
</div>
但是,现在我想从子域加载精灵,如下所示:
<div class="container">
<svg class="icon">
<title>Icon Title</title>
<use xlink:href="https://sub.domain.com/svg/sprite-home.svg#icon"/>
</svg>
</div>
不幸的是,这不起作用,因为未获取文件。我也尝试过<object>,但这似乎也不起作用。
到目前为止,我只能使用
<?php include_once("https://sub.domain.com/svg/sprite.svg"); ?>
它可以作为快速修复,因为这不涉及太多重构。然而,这也意味着 HTML 变得臃肿。
使用<use> 方法可以缓存精灵。但是使用include 方法,精灵不会被缓存,只会被嵌入,因此它远非理想。
是否有人使用与跨域请求和浏览器缓存兼容的 php include 方法的替代方法?
【问题讨论】:
-
子域访问应该适用于 Firefox 上的子域。我认为您可能在 Chrome/Safari/IE 上遇到问题。有一个测试套件测试用例:w3.org/Graphics/SVG/Test/20110816/svg/struct-use-05-b.svg
-
更糟糕的是,Firefox 也不适合我。我一直在寻找并找到了 JS 的解决方案。下面我贴出来
标签: html svg cross-domain sprite