You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
有更新的ServiceWorker完成安装后会进入waiting状态。直到所有已打开的页面都关闭,旧的 Service Worker 自动停止,新的 Service Worker 才会在接下来打开的页面里生效。
如果希望在有系版本时所有的页面都得到更新,可以在install事件中执行skipWaiting方法跳过waiting状态,然后回会直接进入activate阶段。接着在activate事件发生时,通过执行self.clients.claim()方法,更新所有客户端上的ServiceWorker
Progressive Web Apps
浏览器支持
ServiceWorker 是什么
service worker 是独立于当前页面的一段运行在浏览器后台进程里的脚本。
service worker不需要用户打开 web 页面,也不需要其他交互,异步地运行在一个完全独立的上下文环境,不会对主线程造成阻塞。
service worker提供一种渐进增强的特性,使用特性检测来渐渐增强,不会在老旧的不支持 service workers 的浏览器中产生影响。可以通过service workers解决让应用程序能够离线工作,让存储数据在离线时使用的问题。
ServiceWorker 特点
ServiceWorker 生命周期
install -> installed -> activating -> activate -> activated -> redundant
install
ServiceWorker 更新
有更新的ServiceWorker完成安装后会进入
waiting
状态。直到所有已打开的页面都关闭,旧的 Service Worker 自动停止,新的 Service Worker 才会在接下来打开的页面里生效。如果希望在有系版本时所有的页面都得到更新,可以在
install
事件中执行skipWaiting
方法跳过waiting状态,然后回会直接进入activate
阶段。接着在activate
事件发生时,通过执行self.clients.claim()
方法,更新所有客户端上的ServiceWorker添加到主屏幕(显示应用安装横幅)
显示应用安装横幅的条件:
short_name
用于主屏幕显示name
用于安装横幅显示icons
其中必须包含一个 mime 类型为 image/png 的图标声明start_url
应用启动地址display
必须为standalone�或fullscreenmanifest.json的配置
应用横幅安装事件
beforeinstallprompt
返回一个名为userChoice
的Promise对象,并在用户对横幅�进行操作时进行解析,Promise会返回属性outcome
,该属性的值为dismissed
或accepted
,如果用户将网页添加到主屏幕则返回accepted
。取消或延迟安装横幅的触发事件
网站虽然不能主动触发安装横幅的显示事件,但是当该事件被浏览器触发之后,可以对其进行取消或者延迟。
通过阻止
beforeinstallprompt
事件的默认行为,即可取消横幅弹出:beforeinstallprompt
事件返回一个名为prompt
的方法,通过执行该方法可以触发安装横幅的显示。The text was updated successfully, but these errors were encountered: