PWA 必须在 HTML head 中用 <link rel="manifest" href="/manifest.json"> 声明 manifest,且 href 须以 / 开头;需配置 viewport 为 width=device-width, initial-scale=1 并禁用 user-scalable=no;必须使用 HTTPS(或 localhost);manifest 中需显式定义 theme_color 和 background_color,并设 display 为 "standalone" 或 "minimal-ui"。

manifest.json 文件必须通过 link 标签声明在 HTML 中
没有这行,浏览器根本不会识别你的 PWA。常见错误是把 manifest.json 放错路径,或漏掉 rel="manifest" 属性。
正确写法(放在 <head> 内):
<link rel="manifest" href="/manifest.json">
-
href必须是相对根路径(以/开头),否则 Service Worker 无法正确读取 - 文件 MIME 类型需为
application/manifest+json,Nginx/Apache 要配置好,否则 Chrome 会静默忽略 - 不要用
<script>动态插入该标签——浏览器只在初始 HTML 解析阶段扫描manifest
必须有 meta name="viewport" 且 content 含 width=device-width
PWA 安装提示和全屏模式依赖响应式基础。如果 viewport 缺失或写成 width=1024 这类固定值,iOS Safari 直接拒绝显示“添加到主屏幕”按钮。
最小可用配置:
立即学习“前端免费学习笔记(深入)”;
<meta name="viewport" content="width=device-width, initial-scale=1">
- Android Chrome 对此较宽容,但 iOS 是硬性要求
- 禁止使用
user-scalable=no,否则 iOS 不触发安装流程 - 这个
meta必须出现在 HTML 的<head>中,不能靠 JS 注入
HTTPS 是强制前提,HTTP 环境下 navigator.serviceWorker 为 undefined
所有 PWA 核心能力(离线缓存、推送、后台同步)都依赖 Service Worker,而它只在 HTTPS 或 localhost 下注册成功。
- 开发时可用
localhost绕过,但一旦换成本机 IP(如192.168.x.x)就失效 - 自签名证书不行,必须是受信任 CA 签发,或使用
mkcert本地生成可信证书 - 检查方法:打开控制台,执行
typeof navigator.serviceWorker,返回"undefined"就说明环境不满足
theme_color 和 background_color 必须在 manifest.json 中显式定义
这两个字段影响安装后启动屏和地址栏颜色。缺失时 Android Chrome 会 fallback 到白色,导致闪白;iOS 则可能跳过生成启动图。
manifest 示例片段:
{
"theme_color": "#4285f4",
"background_color": "#ffffff",
"display": "standalone"
}
-
theme_color控制状态栏/地址栏颜色,建议与页面主色一致 -
background_color只用于启动屏背景,不是页面背景,别填成透明值(如#00000000) -
display: "standalone"或"minimal-ui"才能隐藏浏览器 UI,"browser"模式不算真正 PWA



















