This repository has been archived on 2023-11-13. You can view files and clone it, but cannot push or open issues or pull requests.
blog/js/sw-registration.js
2023-06-03 15:58:09 +08:00

58 lines
2.0 KiB
JavaScript

/* ===========================================================
* sw-registration.js
* ===========================================================
* Copyright 2016 @huxpro
* Licensed under Apache 2.0
* Register service worker.
* ========================================================== */
// SW Version Upgrade Ref: <https://youtu.be/Gb9uI67tqV0>
function handleRegistration(registration){
console.log('Service Worker Registered. ', registration)
/**
* ServiceWorkerRegistration.onupdatefound
* The service worker registration's installing worker changes.
*/
registration.onupdatefound = (e) => {
const installingWorker = registration.installing;
installingWorker.onstatechange = (e) => {
if (installingWorker.state !== 'installed') return;
if (navigator.serviceWorker.controller) {
console.log('SW is updated');
} else {
console.log('A Visit without previous SW');
createSnackbar({
message: 'App ready for offline use.',
duration: 3000
})
}
};
}
}
if(navigator.serviceWorker){
// For security reasons, a service worker can only control the pages
// that are in the same directory level or below it. That's why we put sw.js at ROOT level.
navigator.serviceWorker
.register('/sw.js')
.then((registration) => handleRegistration(registration))
.catch((error) => {console.log('ServiceWorker registration failed: ', error)})
// register message receiver
// https://dbwriteups.wordpress.com/2015/11/16/service-workers-part-3-communication-between-sw-and-pages/
navigator.serviceWorker.onmessage = (e) => {
console.log('SW: SW Broadcasting:', event);
const data = e.data
if(data.command == "UPDATE_FOUND"){
console.log("UPDATE_FOUND_BY_SW", data);
createSnackbar({
message: "Content updated.",
actionText:"refresh",
action: function(e){location.reload()}
})
}
}
}