PWA完全依赖JavaScript实现——Service Worker必须用原生JS编写并注册,manifest.json仅作声明,离线、安装、推送等功能均需JS显式控制生命周期与缓存逻辑。

Service Worker 必须用 JavaScript 编写
Service Worker 本质就是一个独立运行的 sw.js 脚本,浏览器只认 JS,不接受 TypeScript、WASM 或其他语言直接注册。它不能访问 document 或 window,但能调用 caches、fetch、clients 等 API,全靠 JS 控制生命周期和网络代理逻辑。
-
self.addEventListener('install', ...)和self.addEventListener('fetch', ...)是固定入口,必须用原生 JS 写 - 缓存策略(比如先缓存再更新、失败回退)得靠 JS 判断条件、链式调用 Promise,没法靠配置文件自动完成
- 常见错误:在
sw.js里写console.log(document.title)—— 直接报错,因为没document
manifest.json 只是声明,真正“激活 PWA”靠 JS 注册
manifest.json 是个静态 JSON 文件,它本身不会让网站变成 PWA;真正触发浏览器识别为可安装应用的,是 JS 中这行调用:
威博仿淘宝多用商城程序于4月底发布公测以来,得到了广大用户的关注和支持,陆续有很多意见和建议反馈到威博网络技术部。广泛的关注与支持,也是威博仿淘宝多用商城程序不断进步的一个重要原因。威博网络有这么多忠实的支持者才会有今天的成绩。经过一个多月的在线测试,威博仿淘宝多用商城程序有望于6月底正式对外发布销售!这套购物网站源代码/购物网站系统免费下载--威博网络是在多用户网上商城系统的基础上,全面整合仿淘
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js');
}
- 路径必须正确:
/sw.js表示根目录,如果放错位置(比如放在/js/sw.js),注册会成功但作用域受限,导致缓存不生效 - 注册时机很重要:必须等页面加载完(
window.addEventListener('load', ...)),否则在某些安卓 WebView 中会静默失败 - 漏掉
event.waitUntil(...)或self.skipWaiting(),会导致新版本 SW 卡在 waiting 状态,用户始终用不到更新
离线 fallback、安装提示、推送通知都靠 JS 主动干预
PWA 的“类原生体验”不是自动来的,每一项都要 JS 显式实现:
- 离线页不是默认存在,得在
fetch事件里手动判断navigator.onLine或捕获fetch失败,然后return caches.match('/offline.html') - “添加到主屏幕”按钮不自动弹出,要监听
beforeinstallprompt事件,保存event,再用event.prompt()触发安装流程 - 推送通知需要 JS 调用
registration.pushManager.subscribe(),还要处理服务端密钥、加密 payload、以及在 SW 里响应push事件
activate 阶段调用 self.clients.claim() 是为了让已打开的页面立刻受新 SW 控制,这个细节漏掉,用户刷新页面前永远看不到更新——这种问题不会报错,只会让你反复怀疑“为什么缓存没生效”。










