manifest属性已完全失效,不是配置问题而是机制删除;Chrome 95+、Firefox 85+、Safari 16.4+均彻底移除Application Cache解析逻辑,浏览器静默忽略该属性,不报错、不发请求、不写缓存,window.applicationCache返回undefined,DevTools中“Manifest”面板消失。

manifest属性已完全失效,不是配置问题而是机制删除
HTML 中的 manifest 属性在 2026 年已无任何作用。Chrome 95+、Firefox 85+、Safari 16.4+ 均已从代码中彻底移除 Application Cache 解析逻辑——它不会报错、不发请求、不写缓存,只是被浏览器解析器跳过。你看到页面没离线、资源没缓存、控制台没提示,不是路径错了、不是 MIME 没配对,是这整套机制不存在了。
验证方式很简单:window.applicationCache 在控制台执行返回 undefined;DevTools 的 Application 面板里“Manifest”选项卡已消失;chrome://appcache-internals/ 地址在 Chrome 94+ 后直接 404。只要这三个现象中任一成立,就说明你的环境已不支持 manifest。
为什么删了 manifest 属性,页面还是加载旧资源
旧缓存未清除,AppCache 仍在锁定资源。即使你已停用 manifest,只要浏览器曾经成功激活过该缓存组,它就会继续拦截所有匹配路径的请求(标着 “(from Application Cache)”),且不受刷新、Cache-Control 或 Service Worker 影响。
- 检查是否还有残留:
必须全项目搜索并删除,包括模板、构建产物、CDN 缓存中的 HTML - 确认 AppCache 是否激活:控制台运行
window.applicationCache.status,非0(UNCACHED)即表示仍在生效 - 强制废弃缓存组:服务器对原 manifest 路径(如
/app.manifest)返回410 Gone状态码,浏览器下次访问会自动丢弃整个缓存组 - 手动清除(仅限旧版 Chrome):地址栏输入
chrome://appcache-internals/→ 找到对应 origin → 点 Remove;新版需靠 410 + 重启浏览器或清空全部站点数据
Service Worker 注册成功但 fetch 事件没触发
这是 AppCache 和 Service Worker 共存时的典型冲突。AppCache 优先级高于 SW,只要它还在生效,所有静态资源请求都会被 AppCache 截获,fetch 事件根本不会触发——哪怕你看到 navigator.serviceWorker.register('sw.js') 返回 resolved,SW 也处于“注册但未接管”状态。
立即学习“前端免费学习笔记(深入)”;
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
必须按顺序操作:
- 先确保
window.applicationCache.status === 0,否则 SW 不会接管任何请求 -
sw.js必须放在根目录(如/sw.js),不能带查询参数(sw.js?v=1会被视为新脚本) - 注册必须在页面加载早期执行(
底部或DOMContentLoaded回调中),否则首屏资源已发出网络请求,无法被拦截 - 检查 Network 面板:所有资源响应头应显示
(from cache)或(from service worker),而非(from Application Cache)
HTML 文件离线打不开,但 JS/CSS 能缓存
Service Worker 不会自动缓存 HTML 入口文件。如果你只在 cache.addAll() 里写了 ['/app.js', '/style.css'],而漏掉 '/' 或 '/index.html',离线时浏览器连主文档都拿不出来,直接白屏或 ERR_FAILED。
关键细节:
- HTML 必须显式加入缓存列表,推荐绝对路径:
['/', '/index.html', '/offline.html'];相对路径(如'./index.html')在不同入口路径下解析结果不可控 -
cache.addAll()是原子操作:列表中任一 URL 返回 404、跨域或响应头含Cache-Control: no-store,整个缓存失败,SW 卡在installing状态 - 服务端对 HTML 响应头建议设为
Cache-Control: public, max-age=0,避免后端禁止缓存导致 SW 缓存失败 - 不要依赖
document.write或内联脚本注入关键 DOM——这些内容不在缓存中,离线时丢失
真正麻烦的不是写错一行代码,而是旧 manifest 缓存和新 SW 逻辑混在一起——它们不兼容、不共存、不报错,只静默打架。动手前先确认 AppCache 已清空,否则所有 SW 调试都是徒劳。


















