如何强制支持 SVG 的浏览器加载 SVG 而不是回退?

How do I force SVG-supporting browsers to load the SVG instead of fallbacks?

<picture>
  <source type="image/svg+xml" srcset="icons/home.svg">
  <img src="home-1x.png" srcset="home-2x.png 2x" alt="Home">
</picture>

Safari 9,它完全能够将 SVG 加载到主页-2x.png 而不是在我的视网膜 MacBook 上。为什么不加载 SVG?怎么才能逼它的手?

谢谢!

正如评论中指出的那样,<img src="home-1x.png" srcset="icons/home.svg 1x" alt="Home"> 有效(对于 SVG;不是一般情况)。

如果要支持pre-srcset浏览器,可以使用

<object type="image/svg+xml" data="icons/home.svg">
 <img src="home-1x.png" alt="Home">
</object>

但这也有一些问题:两种资源都将被加载,object 更像 iframe 而不是 img(你可以 select SVG 中的文本,它可以执行脚本、导航等)。

另一个经典是这样使用onerror

<img src="icons/home.svg" onerror="this.onerror=null; this.src='home-1x.png';" alt="Home">

这有一个缺点,即非 SVG 浏览器会不必要地加载 SVG,没有脚本和 SVG 支持的用户将不会加载任何图像。我想这不是什么大问题。

最后,您可以使用 picture 标记并引入 http://scottjehl.github.io/picturefill/ 然后它应该就可以正常工作了(对于启用了脚本的用户)。