Unregistering/Removing a Service Worker

前端 未结 2 1522
轻奢々
轻奢々 2020-12-19 20:07

I have a bad service worker that is no longer updating. I noticed the issue in Chrome first. I then put the following code in the index.html file and in the sw.js (service w

相关标签:
2条回答
  • 2020-12-19 20:54

    Below sample code will check for service worker registered in your browser and fetch it.

    registration.active.scriptURL will provide you exact url of all service workers.

    registration.unregister(); will remove that service worker.

    LINK: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/unregister

    if ('serviceWorker' in navigator) {
        navigator.serviceWorker.getRegistrations()
            .then(function(registrations) {
                for(let registration of registrations) {
                   if(registration.active.scriptURL == 'http://localhost/my-push/myworker.js'){ registration.unregister(); }
                }
            });
    }
    

    If you want to update service worker code than use https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/update

    0 讨论(0)
  • 2020-12-19 20:58

    I stumbled across this answer which seemed a better-than-most solution.

    Blog Post: https://medium.com/@nekrtemplar/self-destroying-serviceworker-73d62921d717

    Github: https://github.com/NekR/self-destroying-sw

    It destroys itself with this code:

    self.addEventListener('install', function(e) {
      self.skipWaiting();
    });
    
    self.addEventListener('activate', function(e) {
      self.registration.unregister()
        .then(function() {
          return self.clients.matchAll();
        })
        .then(function(clients) {
          clients.forEach(client => client.navigate(client.url))
        });
    });
    

    Here's an even more in-depth explanation and further improvement on the above code. https://love2dev.com/blog/how-to-uninstall-a-service-worker/

    0 讨论(0)
提交回复
热议问题