You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Font Awesome带use标签的SVG元素无法缓存问题求助

针对Firefox 68esr中SVG Sprite缓存问题的编程解决方案

针对你在Firefox 68esr里遇到的<use>引用SVG sprite无法缓存的问题,结合我之前踩过的类似坑,给你几个编程层面的解决方案,应该能帮到你:

  • 内联SVG Sprite到HTML文档中
    这是最直接绕过外部缓存问题的方法:把sprites/solid.svg里的所有<symbol>内容直接嵌入到HTML的隐藏<svg>标签里,这样页面中的<use>直接引用内部的ID,完全不需要发起外部请求,自然就不存在缓存问题了。示例代码:

    <!-- 放在HTML的<body>开头或者<head>里都可以 -->
    <svg style="display: none;">
      <symbol id="comments" viewBox="0 0 24 24">
        <!-- 这里粘贴solid.svg中comments图标的path等内容 -->
      </symbol>
      <!-- 把你需要的其他SVG symbol也都放在这里 -->
    </svg>
    
    <!-- 页面中使用时直接引用ID -->
    <svg class="smallwhiteicon"><use href="#comments"></use></svg>
    

    这种方式不仅解决了缓存问题,还能减少HTTP请求数,对页面加载速度优化也有帮助。

  • 给SVG Sprite URL添加版本哈希
    虽然你已经确认了缓存响应头正常,但Firefox 68这类老版本浏览器对SVG sprite的缓存逻辑可能存在 quirks。给Sprite文件的URL添加一个基于文件内容的哈希作为版本号(比如sprites/solid.svg?v=abc123),当文件内容不变时哈希值不会变,浏览器会一直使用缓存;当文件更新时哈希值改变,浏览器才会重新请求新文件。
    你可以用构建工具(如Webpack、Gulp)自动生成这个哈希,也可以手动维护版本号。修改后的引用代码:

    <svg class="smallwhiteicon"><use href="sprites/solid.svg?v=abc123#comments"></use></svg>
    
  • 用JavaScript预加载SVG Sprite
    通过JS提前加载SVG Sprite文件并插入到DOM中,这样后续页面中的<use>引用时,文件内容已经存在于本地DOM中,不需要再发起网络请求。示例代码:

    function preloadSvgSprite(spriteUrl) {
      fetch(spriteUrl)
        .then(response => response.text())
        .then(svgContent => {
          const hiddenSvg = document.createElement('svg');
          hiddenSvg.style.display = 'none';
          hiddenSvg.innerHTML = svgContent;
          document.body.appendChild(hiddenSvg);
        })
        .catch(err => console.error('预加载SVG Sprite失败:', err));
    }
    
    // 页面加载完成后执行预加载
    window.addEventListener('load', () => {
      preloadSvgSprite('sprites/solid.svg');
    });
    

    这种方式相当于手动实现了缓存逻辑,确保<use>引用时资源已经就绪。

  • 确认SVG文件的Content-Type响应头
    虽然你提到已经配置了Expires头,但还是要检查下服务器返回的SVG文件的Content-Type是否为image/svg+xml。Firefox老版本对Content-Type不正确的SVG文件可能会有缓存异常。如果你的Apache配置里没设置,添加以下配置:

    AddType image/svg+xml .svg
    

    这个步骤属于配置层面,但却是很多人容易忽略的细节,确保文件被浏览器正确识别为SVG类型。

内容的提问来源于stack exchange,提问作者dark_st3alth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:37:36