66 lines
2.8 KiB
JavaScript
66 lines
2.8 KiB
JavaScript
"use strict";
|
|
|
|
var _apiRunnerBrowser = require("./api-runner-browser");
|
|
|
|
if (window.location.protocol !== `https:` && window.location.hostname !== `localhost`) {
|
|
console.error(`Service workers can only be used over HTTPS, or on localhost for development`);
|
|
} else if (`serviceWorker` in navigator) {
|
|
navigator.serviceWorker.register(`${__BASE_PATH__}/sw.js`).then(function (reg) {
|
|
reg.addEventListener(`updatefound`, () => {
|
|
(0, _apiRunnerBrowser.apiRunner)(`onServiceWorkerUpdateFound`, {
|
|
serviceWorker: reg
|
|
}); // The updatefound event implies that reg.installing is set; see
|
|
// https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event
|
|
|
|
const installingWorker = reg.installing;
|
|
console.log(`installingWorker`, installingWorker);
|
|
installingWorker.addEventListener(`statechange`, () => {
|
|
switch (installingWorker.state) {
|
|
case `installed`:
|
|
if (navigator.serviceWorker.controller) {
|
|
// At this point, the old content will have been purged and the fresh content will
|
|
// have been added to the cache.
|
|
// We set a flag so Gatsby Link knows to refresh the page on next navigation attempt
|
|
window.___swUpdated = true; // We call the onServiceWorkerUpdateReady API so users can show update prompts.
|
|
|
|
(0, _apiRunnerBrowser.apiRunner)(`onServiceWorkerUpdateReady`, {
|
|
serviceWorker: reg
|
|
}); // If resources failed for the current page, reload.
|
|
|
|
if (window.___failedResources) {
|
|
console.log(`resources failed, SW updated - reloading`);
|
|
window.location.reload();
|
|
}
|
|
} else {
|
|
// At this point, everything has been precached.
|
|
// It's the perfect time to display a "Content is cached for offline use." message.
|
|
console.log(`Content is now available offline!`); // Post to service worker that install is complete.
|
|
// Delay to allow time for the event listener to be added --
|
|
// otherwise fetch is called too soon and resources aren't cached.
|
|
|
|
(0, _apiRunnerBrowser.apiRunner)(`onServiceWorkerInstalled`, {
|
|
serviceWorker: reg
|
|
});
|
|
}
|
|
|
|
break;
|
|
|
|
case `redundant`:
|
|
console.error(`The installing service worker became redundant.`);
|
|
(0, _apiRunnerBrowser.apiRunner)(`onServiceWorkerRedundant`, {
|
|
serviceWorker: reg
|
|
});
|
|
break;
|
|
|
|
case `activated`:
|
|
(0, _apiRunnerBrowser.apiRunner)(`onServiceWorkerActive`, {
|
|
serviceWorker: reg
|
|
});
|
|
break;
|
|
}
|
|
});
|
|
});
|
|
}).catch(function (e) {
|
|
console.error(`Error during service worker registration:`, e);
|
|
});
|
|
} |