ServiceWorkerContainer
Базовая реализация Широко поддерживается *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с апреля 2018 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Интерфейс ServiceWorkerContainer API сервисных рабочих Service Worker API предоставляет объект, представляющий сервисного рабочего как единицу в экосистеме сети, включая возможности регистрации, отмены регистрации и обновления сервисных рабочих, а также доступ к состоянию сервисных рабочих и их регистраций.
Наиболее важным является метод ServiceWorkerContainer.register(), используемый для регистрации сервисных рабочих, и свойство ServiceWorkerContainer.controller, используемое для определения того, контролируется ли текущая страница активно.
Объекты ServiceWorkerContainer доступны в области видимости окна через Navigator.serviceWorker и в рабочих процессах с помощью WorkerNavigator.serviceWorker (если поддерживается — проверьте совместимость с браузером).
Свойства экземпляра
-
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.411.1–16.4Хотя обработчик событияonmessageerror поддерживается, событие messageerror никогда не срабатывает. |
80 | 65 | 57 | 16.411.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 | Нет | Нет |
См. также
© 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