Spec-Zone.ru › Web APIs

ServiceWorkerContainer

Базовая реализация Широко поддерживается *

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с апреля 2018 года.

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Интерфейс ServiceWorkerContainer API сервисных рабочих Service Worker API предоставляет объект, представляющий сервисного рабочего как единицу в экосистеме сети, включая возможности регистрации, отмены регистрации и обновления сервисных рабочих, а также доступ к состоянию сервисных рабочих и их регистраций.

Наиболее важным является метод ServiceWorkerContainer.register(), используемый для регистрации сервисных рабочих, и свойство ServiceWorkerContainer.controller, используемое для определения того, контролируется ли текущая страница активно.

Объекты ServiceWorkerContainer доступны в области видимости окна через Navigator.serviceWorker и в рабочих процессах с помощью WorkerNavigator.serviceWorker (если поддерживается — проверьте совместимость с браузером).

EventTarget ServiceWorkerContainer

Свойства экземпляра

ServiceWorkerContainer.controller Только для чтения

Возвращает объект ServiceWorker, если его состояние activating или activated (тот же объект, возвращаемый ServiceWorkerRegistration.active). Это свойство возвращает null во время запроса принудительной перезагрузки (Shift + перезагрузка) или если нет активного рабочего процесса.

ServiceWorkerContainer.ready Только для чтения

Предоставляет способ отложить выполнение кода до активации сервисного рабочего. Возвращает Promise, который никогда не отклоняется и ожидает неопределенно долго, пока у ServiceWorkerRegistration, связанного с текущей страницей, будет ServiceWorkerRegistration.active рабочий процесс. После того, как это условие выполнено, он разрешается с ServiceWorkerRegistration.

Методы экземпляра

ServiceWorkerContainer.getRegistration()

Возвращает объект ServiceWorkerRegistration, область действия которого соответствует предоставленному URL документа. Метод возвращает Promise, который разрешается в ServiceWorkerRegistration или undefined.

ServiceWorkerContainer.getRegistrations()

Возвращает все объекты ServiceWorkerRegistration, связанные с ServiceWorkerContainer в массиве. Метод возвращает Promise, который разрешается в массив ServiceWorkerRegistration.

ServiceWorkerContainer.register()

Создает или обновляет ServiceWorkerRegistration для данного scriptURL.

ServiceWorkerContainer.startMessages()

Явно запускает поток сообщений, отправляемых из сервисного рабочего в страницы, находящиеся под его управлением (например, отправленные через Client.postMessage()). Это можно использовать для более ранней реакции на отправленные сообщения, даже до завершения загрузки содержимого этой страницы.

События

controllerchange

Срабатывает, когда у документа связанный ServiceWorkerRegistration получает новый active рабочий процесс.

error Устарело Нестандартно

Срабатывает всякий раз, когда возникает ошибка в связанных сервисных рабочих.

message

Срабатывает, когда принимаемые сообщения получены объектом ServiceWorkerContainer (например, через вызов MessagePort.postMessage()).

messageerror

Срабатывает, когда принимаемые сообщения не могут быть десериализованы объектом ServiceWorkerContainer (например, через вызов MessagePort.postMessage()).

Примеры

В примере ниже сначала проверяется, поддерживает ли браузер сервисные рабочие. Если поддерживает, код регистрирует сервисного рабочего и определяет, контролируется ли страница активно сервисным рабочим. Если нет, он предлагает пользователю перезагрузить страницу, чтобы сервисный рабочий мог взять контроль. Код также сообщает об ошибках регистрации.

if ("serviceWorker" in navigator) {
  // Register a service worker hosted at the root of the
  // site using the default scope.
  navigator.serviceWorker
    .register("/sw.js")
    .then((registration) => {
      console.log("Service worker registration succeeded:", registration);

      // At this point, you can optionally do something
      // with registration. See https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
    })
    .catch((error) => {
      console.error(`Service worker registration failed: ${error}`);
    });

  // Independent of the registration, let's also display
  // information about whether the current page is controlled
  // by an existing service worker, and when that
  // controller changes.

  // First, do a one-off check if there's currently a
  // service worker in control.
  if (navigator.serviceWorker.controller) {
    console.log(
      "This page is currently controlled by:",
      navigator.serviceWorker.controller,
    );
  }

  // Then, register a handler to detect when a new or
  // updated service worker takes control.
  navigator.serviceWorker.oncontrollerchange = () => {
    console.log(
      "This page is now controlled by",
      navigator.serviceWorker.controller,
    );
  };
} else {
  console.log("Service workers are not supported.");
}

Спецификации

Спецификация
Сервисные рабочие
# serviceworkercontainer-interface

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
ServiceWorkerContainer 40 17 44 27 11.1 40 44 27 11.3 4.0 40
controller 40 17 44 27 11.1 40 44 27 11.3 4.0 40
controllerchange_event 40 17 44 27 11.1 40 44 27 11.3 4.0 40
getRegistration 40 17 44 27 11.1 40 44 27 11.3 4.0 40
getRegistrations 45 17 44 27 11.1 45 44 27 11.3 4.0 40
message_event 40 17 44 27 11.1 40 44 27 11.3 4.0 40
messageerror_event 80 8017–79 65 67 16.4
11.1–16.4Хотя обработчик события onmessageerror поддерживается, событие messageerror никогда не срабатывает.
80 65 57 16.4
11.3–16.4Хотя обработчик события onmessageerror поддерживается, событие messageerror никогда не срабатывает.
13.0 80
ready 40 17 44 27 11.1 40 44 27 11.3 4.0 40
register 40 17 44 27 11.1 40 44 27 11.3 4.0 40
startMessages 74 79 64 62 11.1 74 64 50 11.3 11.0 74
worker_support Нет Нет 133 Нет 11.1 Нет 133 Нет 11.3 Нет Нет

См. также

  • Использование Service Workers
  • Базовый пример кода Service workers
  • Использование web workers

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API