2015-01-21 16 views
6

Poniższy obraz pokazuje, że zainstalowanych jest dwóch pracowników - jeden aktywny, a drugi nie aktywny (właśnie zainstalowany).Jak zatrzymać starszych pracowników serwisowych?

two service workers running

  1. Zarejestruj pracownik serwisowy
  2. wprowadzić zmiany do service-worker.js i przeładuj stronę.
  3. Logika polega na tym, że pracownicy usług sprawdzają różnice binarne i aktualizują wersje pracowników.

Tak więc nowy pracownik serwisowy jest spawnowany z nowym ID wersji. Ale dlaczego stary wciąż działa? i Jak to zamknąć?

sw.js jest tutaj https://gist.github.com/boopathi/57b7e8b6d657d55bdc7d

Odpowiedz

9

Domyślnie, aż wszystkie karty, które mają stronę kontrolowaną przez tego starego pracownika serwisu są zamknięte/rozładowana, stary pracownik usługa pozostanie uruchomiony. Nowy pracownik serwisu będzie "czekać" w stanie "oczekiwania".

Istnieją opcje, które zmieniają to domyślne zachowanie. Są to: skipWaiting() i clients.claim().

Po wywołaniu skipWaiting() z instalującego pracownika usługi, to, oczywiście, pominie stan "oczekiwania" i natychmiast się aktywuje. Jednak nie będzie to konieczne, aby przejąć kontrolę nad stronami pomimo ich aktywacji - to właśnie osiągnie clients.claim().

+0

Wygląda na to, że 'skipWaiting()' i 'clients.claim()' nie uruchamiają zdarzenia controllerchange. Jestem obecny oglądając kurs o SW - https://classroom.udacity.com/courses/ud899/ i stwierdziłem, że obecnie jedyną opcją jest opuszczenie strony, a następnie powrót. SkipWaiting nie zadziałał dla mnie –

+0

Ale wygląda na to, że zadziałało około 12/2015 –