registerServiceWorker.js (2210B)
1 // In production, we register a service worker to serve assets from local cache. 2 3 // This lets the app load faster on subsequent visits in production, and gives 4 // it offline capabilities. However, it also means that developers (and users) 5 // will only see deployed updates on the "N+1" visit to a page, since previously 6 // cached resources are updated in the background. 7 8 // To learn more about the benefits of this model, read https://goo.gl/KwvDNy. 9 // This link also includes instructions on opting out of this behavior. 10 11 module.exports = function register() { 12 if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) { 13 window.addEventListener("load", function() { 14 var swUrl = process.env.PUBLIC_URL + "/service-worker.js"; 15 navigator.serviceWorker 16 .register(swUrl) 17 .then(function(registration) { 18 registration.onupdatefound = function() { 19 var installingWorker = registration.installing; 20 installingWorker.onstatechange = function() { 21 if (installingWorker.state === "installed") { 22 if (navigator.serviceWorker.controller) { 23 // At this point, the old content will have been purged and 24 // the fresh content will have been added to the cache. 25 // It's the perfect time to display a "New content is 26 // available; please refresh." message in your web app. 27 console.log("New content is available; please refresh."); 28 } else { 29 // At this point, everything has been precached. 30 // It's the perfect time to display a 31 // "Content is cached for offline use." message. 32 console.log("Content is cached for offline use."); 33 } 34 } 35 }; 36 }; 37 }) 38 .catch(function(error) { 39 console.error("Error during service worker registration:", error); 40 }); 41 }); 42 } 43 }; 44 45 module.exports.unregister = function unregister() { 46 if ("serviceWorker" in navigator) { 47 navigator.serviceWorker.ready.then(function(registration) { 48 registration.unregister(); 49 }); 50 } 51 };