Hizmet Çalışanını nasıl kaldırabilirim?


161

/serviceworker.jsKök dizinimden sildikten sonra , Chrome hala web kökümden kaldırdığım hizmet çalışanını çalıştırıyor. Web siteme tekrar giriş yapabilmem için servis çalışanını web sitemden ve Chrome'dan nasıl kaldırabilirim?

Sorunu Service Work'ün önbellek mekanizmasına kadar takip ettim ve hata ayıklamak için zamanım olana kadar şimdilik kaldırmak istiyorum. Kullandığım giriş komut dosyası, Google hesaplarına giriş yapabilmeleri için Google sunucularına yönlendiriyor. Ancak login.php sayfasından aldığım tek şey bir ERR_FAILEDmesaj.


2
Firefox'ta da aynı sorun var.
Costa

Yanıtlar:


309

Hizmet Çalışanlarını Programlı Olarak Kaldırma

Servis çalışanlarını programlı olarak şu şekilde kaldırabilirsiniz:

navigator.serviceWorker.getRegistrations().then(function(registrations) {
 for(let registration of registrations) {
  registration.unregister()
} })

Dokümanlar: getKayıtlar , kayıt silme

Servis Çalışanlarını Kullanıcı Arayüzünden Kaldırma

Hizmet çalışanlarını Chrome Devtools'taki Uygulama sekmesinden de kaldırabilirsiniz.


2
"Sıkı kullanın" eklemek zorunda kaldı; Bu koddan önce çalışmasını sağlamak için.
codeKonami

8
Bunun etrafında zamana dayalı bir zaman var mı? Bir kullanıcının bir kez ziyaret ettiğini, işçiyi kaydettiğini ve o zamandan beri gelmediğini söyleyin, bu snippet'i sonsuza kadar kod tabanımızda tutmam gerekiyor mu?
loganfsmyth


10
Bunu ve diğer hizmet çalışanlarını kaldırma / kaldırma seçeneklerini gözden geçiren bir blog yayınım var love2dev.com/blog/how-to-uninstall-a-service-worker
Chris Love

3
Bu nasıl yardımcı olur? Sayfa zaten yüklü çalışan tarafından önbelleğe alınmış ve yeni komut dosyanız kullanıcılar tarafından asla getirilmeyecek.
riv

107

Ayrıca şu URL'ye gidebilirsiniz: chrome: // serviceworker-internals / ve bir servisçinin kaydını oradan kaldırabilirsiniz.


9
Hepsini tek bir düşme kaydında kaldırmak için bunu dev konsoluna yazabilirsiniz. document.querySelectorAll(".unregister").forEach(item=>item.click())
senbon

Ancak, kayıttan kaldırmanız gereken başka ziyaretçileriniz varsa (arkadaşlar, kullanıcılar, proje yöneticileri, vb.), Yukarıdaki cevap (Daniel Herr tarafından) daha etkili bir çözümdür. Ayrıca, test edilecek her biri için iOS, Android, macOS, Windows 10 aromalarında Firefox, Edge ve Safari de var.
Steven Ventimiglia

$$ ('. unregister'). forEach (item => item.click ())
Travnikov.dev

37

Bunu Chrome Geliştirici Aracı aracılığıyla ve Programlı olarak yapabilirsiniz .

  1. Çalışan tüm örnek veya servis çalışanını yazarak bulun

    chrome: // ServiceWorker-internals /

    yeni bir sekmede tıklayın ve ardından kaydını silmek istediğiniz hizmeti veren kişiyi seçin.

  2. Geliştirici Araçları'nı (F12) açın ve Uygulama'yı seçin. O zaman ya

    Depolamayı Temizle -> Servis çalışanının kaydını sil'i seçin

    veya

    Servis Çalışanları'nı seçin -> Yeniden Yüklemede Güncellemeyi Seç

  3. programlama yoluyla

if(window.navigator && navigator.serviceWorker) {
  navigator.serviceWorker.getRegistrations()
  .then(function(registrations) {
    for(let registration of registrations) {
      registration.unregister();
    }
  });
}


22

Google Chrome'da, gidebilirsiniz > Servis işçi -> Uygulama - Geliştirici araçları (F12) ve kaydını bu özel etki alanı için listeden hizmet işçileri.

Ekran görüntüsü

Bu yöntem, bir sitenin geliştirme modunda etkilidir ve çoğunlukla localhostdiğer projelerin geliştirilmesi için ihtiyaç duyabileceğiniz şekilde çalışır.


5

Cihazlarınızda iki API tespit etmelisiniz: getRegistrations ve getRegistration . Hizmet çalışanının tüm platformlarda benzersiz bir API seti yoktur. Örneğin, bazı tarayıcılarda yalnızca a navigator.serviceWorker.getRegistration, no bulunur navigator.serviceWorker.getRegistrations. Yani ikisini de düşünmelisin.


3

FYI, MacOS Safari tarayıcısı kullanıyorsanız , bir hizmet çalışanının zorla kaydını silmenin bir yolu vardır (Safari 12.1 için adımlar ve resimler):

  1. Safari> Tercihler ...> Gizlilik> Web Sitesi Verilerini Yönet… Safari Tercihleri: Gizlilik

  2. Alan adını girin (ör. 'Localhost'), "Kaldır" ı tıklayın Safari Tercihleri: Gizlilik: web sitesi verilerini yönetme

Not: Hizmet çalışanlarına ek olarak, bu etki alanı için tüm önbellekleri, çerezleri ve veritabanlarını da silecektir.


Hizmet çalışanları Özel Pencereden yüklenmişse bu işe yaramaz gibi görünüyor.
aris

3

Verilen doğru cevaplara ek olarak, SW önbelleğini de silmek istiyorsanız, aşağıdaki yöntemi çağırabilirsiniz:

if ('caches' in window) {
    caches.keys()
      .then(function(keyList) {
          return Promise.all(keyList.map(function(key) {
              return caches.delete(key);
          }));
      })
}


Daha bu makalede ( "Bir hizmet işçisi kaydını iptal" Paragraf)


Tarayıcı aracılığıyla bir başka olasılık da "Önbellek Depolama" bölümüne erişip "Site Verilerini Temizle" düğmesini tıklamaktır:

resim açıklamasını buraya girin


0

Servis Çalışanı'nı güvenle kaldırın

if ('serviceWorker' in navigator) {
      navigator.serviceWorker.getRegistrations().then(function (registrations) {
        for (const registration of registrations) {
          // unregister service worker
          console.log('serviceWorker unregistered');
          registration.unregister();
        }
      });
    }

0

servis çalışanını tespit etmek için:

navigator.serviceWorker.controller

Hizmet çalışanının silinmesi için kod:

navigator.serviceWorker.getRegistrations()
  .then(registrations => {
    registrations.forEach(registration => {
      registration.unregister();
    })
  });

  navigator.serviceWorker.getRegistrations().then(function(registrations) {
   for(let registration of registrations) {
    registration.unregister()
  } })

  if(window.navigator && navigator.serviceWorker) {
    navigator.serviceWorker.getRegistrations()
    .then(function(registrations) {
      for(let registration of registrations) {
        registration.unregister();
      }
    });
  }

  if ('caches' in window) {
      caches.keys()
        .then(function(keyList) {
            return Promise.all(keyList.map(function(key) {
                return caches.delete(key);
            }));
        })
  }

  if ('serviceWorker' in navigator) {
        navigator.serviceWorker.getRegistrations().then(function (registrations) {
          for (const registration of registrations) {
            // unregister service worker
            console.log('serviceWorker unregistered');
            registration.unregister();

            setTimeout(function(){
              console.log('trying redirect do');
              window.location.replace(window.location.href); // because without redirecting, first time on page load: still service worker will be available
            }, 3000);
          }
        });
      }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.