manifest属性在当前浏览器中完全无效,chrome 95+、firefox 85+、safari 16.4+均已移除底层实现,不发起请求、不报错、不解析;唯一可行替代方案是service worker,需https或localhost下注册sw.js并精确控制install/fetch/activate事件。

manifest 属性在当前浏览器中完全无效
它不会触发任何缓存行为,也不会报错——浏览器在 HTML 解析阶段就直接跳过 manifest 属性,不发起网络请求,不读取 .appcache 文件,也不执行任何缓存逻辑。Chrome 95+、Firefox 85+、Safari 16.4+ 均已移除底层实现,开发者工具的 Application 面板里早已没有 “Manifest” 选项卡。
旧版规范里 manifest 的写法和限制
如果你在维护 2015–2020 年间的遗留项目,或需要理解历史文档,CACHE MANIFEST 文件需满足以下硬性条件:
-
CACHE MANIFEST必须是文件首行,且严格大小写匹配,前面不能有空格或 BOM - 服务器必须返回
Content-Type: text/cache-manifest,Apache 需配置AddType text/cache-manifest .appcache,Nginx 需在mime.types中添加 -
中的路径必须同源,且cache.appcache文件本身不能被其他缓存规则(如 Service Worker)拦截 - 更新仅靠文件内容变更触发:哪怕只改一行注释(如
# v2.0.1),浏览器才会重新下载整个CACHE列表
为什么现在不能“照着旧规范写就能用”
不是配置不到位,而是标准和实现都已删除:
-
window.applicationCacheAPI 已从全局对象移除,调用会报ReferenceError - 即使你把
manifest属性留在 HTML 里,浏览器控制台只会静默忽略,不会输出警告(不像早期还有Application Cache is deprecated提示) - 本地开发时看到“离线可用”,大概率是 DevTools 的 “Offline” 模拟 + 浏览器 HTTP 缓存(
Cache-Control)混用所致,不是 AppCache 生效 - Electron 或 WebView 等嵌入式环境若仍能运行,说明其内核未升级,不能代表真实用户环境
真正要落地离线功能,只能用 Service Worker
这不是“升级建议”,而是唯一可行路径:
- 注册必须在 HTTPS 或
http://localhost下进行,file://协议会静默失败 -
navigator.serviceWorker.register('sw.js')必须放在顶层脚本中,不能包裹在async函数、模块或事件回调里 -
sw.js中的install事件负责预缓存,fetch事件决定响应来源,activate事件清理旧缓存——三者缺一不可 - 调试时注意:新 SW 注册后不会立即接管页面,需关闭所有标签页,或在 DevTools → Application → Service Workers 中点 “Skip waiting”
残留的 manifest 属性和 .appcache 文件不仅无用,还会干扰判断——删干净,再从头写 sw.js,才是最快路径。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











