manifest属性在html中完全无效,chrome 95+、firefox 95+、safari 16.4+已彻底移除其解析逻辑,不触发缓存、不发请求、不报错;唯一有效方案是service worker配合实现pwa离线能力。

manifest属性写在HTML里完全无效
HTML的manifest属性(如)在Chrome 95+、Firefox 95+、Safari 16.4+中已被彻底移除。它不再触发任何缓存行为,也不会发请求——DevTools 的 Application 面板里“Manifest”选项卡已消失,window.applicationCache返回undefined。这不是配置错路径或 MIME 类型的问题,是浏览器源码里删干净了。
真正有效的PWA入口只剩
现代 PWA 唯一被识别的方式,是在 HTML 的 中用:<link rel="manifest" href="/manifest.json">
-
href必须是根相对路径(以/开头),不能是./manifest.json或manifest.json - 文件必须可通过
https://yoursite.com/manifest.json直接访问,且响应头含Content-Type: application/manifest+json - 服务器未配 MIME 类型时,Nginx 要加
add_header Content-Type "application/manifest+json";,Apache 用AddType application/manifest+json .json - 改完后必须硬刷新(Ctrl+Shift+R)或清空 DevTools → Application → Manifest 面板缓存,否则加载旧版本
manifest.json必须包含这些字段才被当作PWA
缺任意一项,Chrome 和 Edge 就不会显示“添加到主屏幕”按钮,iOS Safari 直接忽略安装逻辑:
-
name和short_name:二者都必须存在;short_name≤12 个 Unicode 字符(一个汉字算 1 个),超长会导致解析失败或图标文字截断 -
start_url:必须返回 HTTP 200,不能重定向到登录页;推荐填"/"或"/index.html",不能是完整 URL 或相对路径如"./" -
display:设为"standalone"才能全屏启动;设成"browser"就退化为普通网页标签 -
icons:至少提供两个 PNG 图标:{"src":"/icons/icon-192.png","sizes":"192x192","type":"image/png"}和{"src":"/icons/icon-512.png","sizes":"512x512","type":"image/png"};sizes字段必须严格是"192x192",不能带px或只写数字
离线降级不能再靠manifest,必须用Service Worker
manifest 属性废弃后,离线页面 fallback 完全依赖 Service Worker 的 fetch 事件。关键点:
-
/offline.html必须在 SW 的install阶段预缓存(caches.addAll(urlsToCache)),否则 fallback 会失败 - 该页面必须自包含:所有引用的 CSS、JS、图片都要进缓存列表,不能写
<script src="/js/app.js"></script>除非/js/app.js也在缓存里 - 路径大小写、后缀、斜杠位置必须和
caches.addAll()中完全一致,否则匹配不上 - 首次访问页面时 SW 尚未激活,断网会直接报
net::ERR_INTERNET_DISCONNECTED;只有第二次刷新或关闭再打开,才可能触发缓存 fallback
start_url 的 200 响应状态——这两项不满足,连 manifest 解析成功了也不会弹出安装提示。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











