Ночные Работники Службы | Интерфейс ServiceWorkerRegistration

[SecureContext, Exposed=(Window,Worker)]
interface ServiceWorkerRegistration : EventTarget {
  readonly attribute ServiceWorker? installing;
  readonly attribute ServiceWorker? waiting;
  readonly attribute ServiceWorker? active;
  [SameObject] readonly attribute NavigationPreloadManager navigationPreload;

  readonly attribute USVString scope;
  readonly attribute ServiceWorkerUpdateViaCache updateViaCache;

  [NewObject] Promise<undefined> update();
  [NewObject] Promise<boolean> unregister();

  // event
  attribute EventHandler onupdatefound;
};

enum ServiceWorkerUpdateViaCache {
  "imports",
  "all",
  "none"
};

 

ServiceWorkerRegistration имеет регистрацию работника службы (service worker registrationрегистрация работника службы).

3.2.1 Получение экземпляров ServiceWorkerRegistration

Объект настроек среды имеет карту объектов регистрации работника службы (service worker registration object map), карту, где ключи — это регистрации работника службы, а значения — это объекты ServiceWorkerRegistration.

Чтобы получить объект регистрации работника службы (get the service worker registration object), представляющий регистрацию registration (регистрацию работника службы) в среде environment (объект настроек среды), выполните следующие действия:

1. Пусть objectMap будет картой объектов регистрации работника службы среды environment.
2. Если objectMap[registration] не существует, тогда:
   2.1 Пусть registrationObject будет новым ServiceWorkerRegistration в Области среды environment.
   2.2 Установите регистрацию работника службы registrationObject на registration.
   2.3 Установите для атрибута installing registrationObject значение null.
   2.4 Установите для атрибута waiting registrationObject значение null.
   2.5 Установите для атрибута active registrationObject значение null.
   2.6 Если устанавливающий работник registration, не равен null, то установите для атрибута installing registrationObject значение результата получения объекта работника службы, который представляет устанавливающего работника registration в среде environment.
   2.7 Если ожидающий работник registration, не равен null, тогда установите для атрибута waiting registrationObject значение результата получения объекта работника службы, который представляет ожидающего работника registration в среде environment.
   2.8 Если активный работник регистрации не равен null, тогда установите для атрибута active registrationObject значение результата получения объекта работника службы, который представляет активного работника registration в среде environment.
   2.9 Установите для objectMap[registration] значение registrationObject.
3. Вернуть objectMap[registration].

 

Атрибут installing должен возвращать значение, которое было установлено в последний раз.

Примечание

Внутри Области существует только один объект ServiceWorker для каждого связанного работника службы.

 

Атрибут waiting должен возвращать значение, которое было установлено в последний раз.

Примечание

Внутри Области существует только один объект ServiceWorker для каждого связанного работника службы.

 

Атрибут active должен возвращать значение, которое было установлено в последний раз.

Примечание

Внутри Области существует только один объект ServiceWorker для каждого связанного работника службы.

3.2.5 Геттер navigationPreload

Шаги получателя navigationPreload должны вернуть объект NavigationPreloadManager регистрации работника службы.

 

3.2.6 Геттер scope

Шаги получателя области видимости scope должны вернуть сериализованный URL-адрес области видимости регистрации работника службы.

ПРИМЕР 3

В примере в § 3.1.2 scriptURL значение registration.scope, полученное из navigator.serviceWorker.ready.then(registration => console.log(registration.scope)), например, будет «https://example .com/«.

 

3.2.7 Геттер updateViaCache

Шаги получателя updateViaCache должны вернуть обновление через режим кеширования, регистрации работника службы.

 

3.2.8 Метод update()

Шаги метода update():

1. Пусть регистрация registration будет регистрацией работника службы.
2. Пусть newestWorker будет результатом выполнения алгоритма Получения Новейшего Работника (Get Newest Worker), передавая registration в качестве аргумента.
3. Если newestWorker имеет значение null, верните отклоненное обещание с DOMException "InvalidStateError", и прервите выполнение этих шагов.
4. Если релевантный глобальный объект globalObject этого this является объектом ServiceWorkerGlobalScope, а связанное состояние работника службы globalObject является "installing", верните отклоненное обещание с DOMException "InvalidStateError", и прервите выполнение этих шагов.
5. Пусть promise будет обещанием.
6. Пусть задание job будет результатом выполнения Создать Задание (Create Job) с обновлением update, URL-адресом области видимости регистрации registration, URL-адресом сценария newestWorker, promise и релевантным объектом настроек этого this.
7. Установите тип рабочего задания job на тип newestWorker.
8. Вызов Запланированного Задания (Schedule Job) с помощью job.
9. Вернуть обещание promise.

 

Примечание

Метод unregister() отменяет регистрацию работника службы. Важно отметить, что в настоящее время контролируемая регистрация активного работника службы, регистрацию работника службы, действует до тех пор, пока все клиенты работника службы (включая его самого), использующие эту регистрацию работника службы, не выгрузятся. То есть метод unregister() влияет только на последующие переходы.

Шаги метода unregister():

1. Пусть обещание promise станет новым обещанием.
2. Пусть задание job будет результатом выполнения Создать Задание (Create Job) с отменой регистрации unregister, URL-адресом области видимости регистрации работника службы, null, promise и релевантным объектом настроек этого this.
3. Вызов Запланированного Задания (Schedule Job) с помощью job.
4. Вернуть promise.

 

3.2.10 Обработчик событий ServiceWorkerRegistration

Ниже приводится обработчик событий (и соответствующий ему тип события обработчика событий), который должен поддерживаться в качестве IDL-атрибутов обработчика событий всеми объектами, реализующими интерфейс ServiceWorkerRegistration:

event handler event handler event type
onupdatefound updatefound

 

Информационные ссылки

Стандарт Service Workers Nightly — https://w3c.github.io/ServiceWorker/#serviceworkerregistration-interface

Поделись записью