[PWA] 9. Service worker registerion && service work's props, methods and listeners
In some rare cases, you need to ask user to refresh the browsser to update the version. Maybe because some secrity issues.
As we have learnt so far. And code change will generate a new service work in the waiting list. Unitl the current service worker completely die (hard refresh or close the window). Then the new service work will take control.
So what we want to do is when there is a new service work ready, we want to notify user that he or she need to refresh the browser to update the appliation version.
First, let's see what kinds of event listener and status service worker has.
Once we register the service worker, it will return a registerion object:
navigation.serviceWorker.register('/sw.js').then(function(reg) {
// method
reg.unregister();
reg.update();
// state
/*
Pointing to the serviceWorker object or be null
*/
reg.installing; // start installing new service worker, if install faild then throw away
reg.waiting; // service worker is ready to take over
reg.activate; // service worker is not take over control
// has listener when update is found
reg.addEventListener('updatefound', function(){
// reg.installing is changed
})
})
API: Link
For the service worker itself:
var sw = reg.installing;
console.log(sw.state); // ...logs "installing"
// state can also be:
// "installed"
// "activating"
// "avvtivated"
// "redundant" sw.addEventListener('statechange', function(){
// sw.state has changed
})
Aslo about:
naviagetor.serviceWorker.controller
"navigator.serviceWorker.controller" refer to the service worker that controls the page.
So if there is no controller, then it means the data is loading from network:
if(!navigator.serviceWorker.controller){
// page didn't load using a service worker but from network
}
Otherwise we need to look for registration.
If there is a "waiting" worker:
if(reg.waiting){
// there is a update ready! Notify user
}
Else If there is a "installing" worker:
if(reg.installing){
// there is an update in progress, but update may fail
// So we still need to track state change
// if it reached installed statue, then notify user
reg.installing.addEventListener('statechange', function(){
if(this.state == "installed"){
// there is an update ready!
}
})
}
Otherwise, we listen 'updatefound', we track "installing" state until it reach "installed", then again we tell the user.
reg.addEventListener('updatefound', function(){
reg.installing.addEventListener('statechange', function(){
if(this.satate == "installed"){
// there is an update ready!
}
})
})
[PWA] 9. Service worker registerion && service work's props, methods and listeners的更多相关文章
- Service worker (@nuxtjs/workbox) 采坑记
PWA(Progressive Web App)是前端的大趋势,它能极大的加快前端页面的加载速度,得到近乎原生 app 的展示效果(其实难说).PWA 其实是多种前端技术的组合,其中最重要的一个技术就 ...
- Service Worker MDN英文笔记
前言: 以前学习基础知识的时候总看别人写的入门文章,但有时候还是一脸懵逼,直到自己用心阅读了MDN的英文文档才对基础知识的一些理论有了更深的理解,所以我在边阅读文档的时候边记录下帮助比较大的,也方便大 ...
- 渐进式web应用开发---service worker 原理及介绍(一)
渐进式web应用(progressive Web app) 是现代web应用的一种新形式.它利用了最新的web功能,结合了原生移动应用的独特特性与web的优点,为用户带来了新的体验. 一:传统web端 ...
- 渐进式web应用开发---Service Worker 与页面通信(七)
_ 阅读目录 一:页面窗口向 service worker 通信 二:service worker 向所有打开的窗口页面通信 三:service worker 向特定的窗口通信 四:学习 Messag ...
- [转] service worker初探:超级拦截器与预缓存
在2014年,W3C公布了service worker的草案,service worker提供了很多新的能力,使得web app拥有与native app相同的离线体验.消息推送体验. service ...
- [PWA] 2. Service worker life cycle
Once serive worker is registered, the first time we go to the app, we cannot see the logs from servc ...
- [PWA] 1. Intro to Service worker
Service worker stays between our browser and noetwork requests. It can help to fetch data from cache ...
- [PWA] Show Notifications when a Service Worker is Installed or Updated
Service Workers get installed and activated in the background, but until we reload the page they don ...
- PWA - service worker - Workbox(未完)
Get Started(开始) 只有get请求才能cache缓存吗? Create and Register a Service Worker File(创建和注册 Service Worker) B ...
随机推荐
- Java学习----你可以知道对象的工作结果(获取方法的返回值)
1.写返回类型 2.return 返回值 3.定义变量接受返回值 public class App2 { public String [] print(String msg, int num) { f ...
- AspNet WebApi : MessageHandler(消息处理器 )
1. Http Message Handler WebApi中的MessageHandler类似MVC中的filter,可用于请求/响应到达真正目标前对请求或者响应进行修改,比如:用户身份验证,请求头 ...
- python有序字典实现代码
class MyDict(dict): #有序字典实现 def __init__(self): self.li = [] super(MyDict,self).__init__() def __set ...
- lsmod
http://blog.csdn.net/yuan892173701/article/details/8960607 抽空写下
- SQL SERVER 2008 nvarchar 转换 deciaml 失败(nvarchar to decimal)
转换数据发生 消息 8115,级别 16,状态 6,第 1 行 将 nvarchar 转换为数据类型 numeric 时出现算术溢出错误. nvarchar 是带很长小数,直接转换成decimal 失 ...
- AES加密跨平台出现的问题
javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.S ...
- 1031. Hello World for U (20) PAT
题目:http://pat.zju.edu.cn/contests/pat-a-practise/1031 分析: 简单题,调整数组的输出次序就可以了. 输入数组长度为len.n1 = n3 = (l ...
- 【POJ】1816 Wild Words
DFS+字典树.题目数据很BT.注意控制DFS深度小于等于len.当'\0'时,还需判断末尾*.另外,当遇到*时,注意讨论情况. #include <iostream> #include ...
- a trick in reading and storing file in the exact way!
read and write file is a very common operation regarding file mainuplation. However, the powerfull g ...
- voronoi