- Promise (http://es6.ruanyifeng.com/#docs/promise)
- Fetch API (https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch)
- Service Worker (https://developer.mozilla.org/zh-CN/docs/Web/API/Service_Worker_API)
- Cache Storage API ()
- Push API (https://developer.mozilla.org/zh-CN/docs/Web/API/Push_API)
- Notification API (https://developer.mozilla.org/zh-CN/docs/Web/API/notification)
- 要求https环境,如果是http则只能是 localhost | 127.0.0.1
- 启动pwa的http环境:open -a /Applications/Google\ Chrome.app --args --user-data-dir --unsafety-treat-insecure-origin-as-secure 【该命令本机验证无效】
- 演示离线缓存
- 演示add to home screen
- 演示离线页面
- 演示推送通知
- 消息订阅
- 需要进行订阅ServiceWorkerRegistration.pushManager.subscribe 、
- service worker 需要监听push事件
- 需要一个订阅应用服务器(https://web-push-codelab.glitch.me/) 【npm install -g web-push】
- 构建App Shell(可以理解为不需要调用后台的UI组件,以便能超快启动)
- 服务工作线程(service worker)
- 注册register
- install事件(安装时缓存必要的资源)
- activate事件(激活时管理缓存,例如删除旧缓存、更新缓存等)
- fetch事件(拦截请求)
- 缺点:
- 务必在每次发生内容更改时更改缓存键
- 每次发生更改时重新下载所有内容
- 浏览器缓存可能阻止服务工作线程缓存更新(即服务工作线程被缓存了!)
- 缓存优先策略产生的副作用:部署的网站极难更新!
- 解决方案:第三方库sw-precache【未研究】
- Add to Home Screen
- manifest.json
- 准备好icons
- 对于有些设备需要打开‘添加到屏幕’的权限,例如华为
- 需要部署到支持https的服务器上
- sevice worker 的浏览器支持情况:https://jakearchibald.github.io/isserviceworkerready/
- 开发时可用localhost(或127.0.0.1), 部署到测试环境、生产环境必须要使用https
- 部署HTTPS的托管主机:firebase、github pages
- chrome://inspect/#service-workers
- Service worker的作用域:服务工作线程注册的默认作用域是与脚本网址相对的 ./。 这意味着如果您在 //example.com/foo/bar.js 注册一个服务工作线程,则它的默认作用域为 //example.com/foo/。
- 更新service worker:如果你的 service worker 已经被安装,但是刷新页面时有一个新版本的可用,新版的 service worker 会在后台安装,但是还没激活。当不再有任何已加载的页面在使用旧版的 service worker 的时候,新版本才会激活。一旦再也没有更多的这样已加载的页面,新的 service worker 就会被激活。
- 调试:debugger、断点
- 注册服务工作线程
- 获取应用服务器密钥,并订阅用户:
- service worker 处理push事件
- service worker 处理notificationclick事件
- 发送推送消息:一般情况下,这个过程就是从网页向后端发送订阅,然后后端通过对订阅中的端点实施 API 调用,进而触发推送消息
- 取消订阅