2015-01-21 4 views
6

아래 이미지는 두 개의 작업자가 설치되어 있음을 보여줍니다. 하나는 활성 상태이고 다른 하나는 활성 상태가 아닙니다 (방금 설치됨). 이전 서비스 직원을 어떻게 중지 하시겠습니까?

  1. two service workers running

  2. service-worker.js을 변경하는 서비스 노동자를 등록하고 페이지를 다시로드합니다.
  3. 논리는 서비스 근로자가 바이너리 diff를 확인하고 작업자의 버전을 업데이트한다는 것입니다.

새 서비스 작업자가 새 버전 ID로 생성됩니다. 그런데 왜 오래된 제품이 계속 작동합니까? 어떻게 닫을 수 있습니까? 그 이전 서비스 노동자에 의해 제어되는 페이지에있는 모든 탭이/언로드 닫힐 때까지

sw.js은, 기본적으로 여기 https://gist.github.com/boopathi/57b7e8b6d657d55bdc7d

답변

9

, 기존의 서비스 작업자가 실행 유지됩니다. 새로운 서비스 종사자는 "대기"상태에서 "대기"할 것입니다.

이 기본 동작을 변경하는 옵션이 있습니다. 그들은 skipWaiting()clients.claim()입니다.

설치 서비스 작업자로부터 skipWaiting()이 호출되면 "대기 중"상태를 건너 뛰고 즉시 활성화됩니다. 그러나 활성화되어 있음에도 불구하고 반드시 페이지를 제어하지는 않습니다. 바로 이것이 clients.claim()의 목표입니다.

+0

'skipWaiting()'과'clients.claim()'는 controllerchange 이벤트를 트리거하지 않는 것 같습니다. 저는 현재 SW에 관한 강의를보고 있습니다 - https://classroom.udacity.com/courses/ud899/ 그리고 현재 유일한 옵션은 페이지를 떠나 다시 돌아 오는 것입니다. SkipWaiting이 나를 위해 작동하지 않았다 –

+0

하지만 12/2015 년경에 효과가있는 것으로 보입니다. –