manifest属性已被标准组织正式弃用并从所有主流浏览器中完全移除,导致applicationCache API失效、缓存不生效且静默失败;唯一替代方案是Service Worker,必须通过HTTPS注册,用caches.open()和event.respondWith()实现离线缓存。

manifest 属性已废弃,现代浏览器(Chrome 94+、Firefox 85+、Safari 16.4+)完全移除支持。强行使用会导致 applicationCache API 报错、缓存不生效,甚至阻塞页面加载。
为什么 manifest 属性不再可用
它不是“失效”,而是被标准组织正式弃用并从所有主流引擎中删除。你写 <html manifest="cache.manifest">,浏览器会直接忽略该属性,不触发任何缓存行为,也不报错——静默失败是最危险的。
- 没有 fallback 机制:一旦移除,旧项目无法降级运行
- 缓存更新不可控:依赖文件内容哈希或注释变更,极易漏更新或误更新
- 同源限制死板:
FALLBACK和NETWORK规则无法动态判断网络状态 - 调试无日志:开发者工具里看不到
applicationCache面板,只剩空白 Network 请求
替代方案必须用 Service Worker
这是唯一被 W3C 标准化、全平台支持的离线缓存方案。它不是“升级选项”,而是当前唯一可行路径。
-
Service Worker必须通过 HTTPS(或localhost)注册,HTTP 站点无法启用 - 注册代码必须放在主页面 JS 中,且不能在模块脚本里直接调用
navigator.serviceWorker.register() - 缓存逻辑写在独立的
sw.js文件里,不能和业务逻辑混写 - 首次访问不会立即生效:需二次刷新或
clients.claim()主动接管
如果必须维护老项目,只能做兼容性兜底
某些内网系统或老旧终端(如定制 Android WebView)可能还残留 AppCache 支持,但不能依赖。
立即学习“前端免费学习笔记(深入)”;
- 检查浏览器是否支持:
if ('applicationCache' in window)—— 现在几乎恒为false - 服务器仍需配置 MIME 类型:
AddType text/cache-manifest .manifest,否则 404 会中断加载 -
cache.manifest文件本身语法没变,但即使正确,浏览器也根本不读它 - 不要试图用
applicationCache.update()触发更新:API 已移除,调用即TypeError
真正要落地离线能力,现在只有一条路:重写缓存逻辑到 Service Worker,用 caches.open() + event.respondWith() 控制请求流。AppCache 不是“过时技术”,它是已被删除的 API —— 就像删掉一个函数,再怎么写调用它都不会执行。



















