serviceWorker.js 2.7 KB

123456789101112131415161718
  1. // This optional code is used to register a service worker.
  2. // register() is not called by default.
  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 subsequent visits to a page, after all the
  6. // existing tabs open on the page have been closed, since previously cached
  7. // resources are updated in the background.
  8. // To learn more about the benefits of this model and instructions on how to
  9. // opt-in, read http://bit.ly/CRA-PWA
  10. const isLocalhost=!!('localhost'===window.location.hostname||// [::1] is the IPv6 localhost address.
  11. '[::1]'===window.location.hostname||// 127.0.0.1/8 is considered localhost for IPv4.
  12. window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));export function register(a){if('production'===process.env.NODE_ENV&&'serviceWorker'in navigator){// The URL constructor is available in all browsers that support SW.
  13. const b=new URL(process.env.PUBLIC_URL,window.location.href);if(b.origin!==window.location.origin)// Our service worker won't work if PUBLIC_URL is on a different origin
  14. // from what our page is served on. This might happen if a CDN is used to
  15. // serve assets; see https://github.com/facebook/create-react-app/issues/2374
  16. return;window.addEventListener('load',()=>{const b=`${process.env.PUBLIC_URL}/service-worker.js`;isLocalhost?(checkValidServiceWorker(b,a),navigator.serviceWorker.ready.then(()=>{console.log('This web app is being served cache-first by a service worker. To learn more, visit http://bit.ly/CRA-PWA')})):registerValidSW(b,a)})}}function registerValidSW(a,b){navigator.serviceWorker.register(a).then(a=>{a.onupdatefound=()=>{const c=a.installing;null==c||(c.onstatechange=()=>{'installed'===c.state&&(navigator.serviceWorker.controller?(console.log('New content is available and will be used when all tabs for this page are closed. See http://bit.ly/CRA-PWA.'),b&&b.onUpdate&&b.onUpdate(a)):(console.log('Content is cached for offline use.'),b&&b.onSuccess&&b.onSuccess(a)))})}}).catch(a=>{console.error('Error during service worker registration:',a)})}function checkValidServiceWorker(a,b){// Check if the service worker can be found. If it can't reload the page.
  17. fetch(a).then(c=>{// Ensure service worker exists, and that we really are getting a JS file.
  18. const d=c.headers.get('content-type');404===c.status||null!=d&&-1===d.indexOf('javascript')?navigator.serviceWorker.ready.then(a=>{a.unregister().then(()=>{window.location.reload()})}):registerValidSW(a,b)}).catch(()=>{console.log('No internet connection found. App is running in offline mode.')})}export function unregister(){'serviceWorker'in navigator&&navigator.serviceWorker.ready.then(a=>{a.unregister()})}