ServiceWorker
Базовая версия Широко доступна *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2018 года.
* Некоторые части этой функции могут иметь разный уровень поддержки.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Интерфейс ServiceWorker API Service Worker предоставляет ссылку на сервис-воркер. Несколько контекстов просмотра (например, страницы, рабочие процессы и т. д.) могут быть связаны с одним сервис-воркером, каждый через уникальный объект ServiceWorker.
Объект ServiceWorker доступен через ряд свойств:
ServiceWorkerRegistration.activeServiceWorkerGlobalScope.serviceWorker-
ServiceWorkerContainer.controller— когда сервис-воркер находится в состоянииactivatingилиactivated -
ServiceWorkerRegistration.installing— когда сервис-воркер находится в состоянииinstalling -
ServiceWorkerRegistration.waiting— когда сервис-воркер находится в состоянииinstalled
Свойство ServiceWorker.state и событие statechanged могут быть использованы для проверки и наблюдения за изменениями в жизненном цикле связанного с объектом сервис-воркера. Связанные события жизненного цикла, такие как install и activate генерируются самим сервис-воркером.
Сервис-воркеры позволяют статически импортировать модули ECMAScript, если поддерживается, с помощью import. Динамический импорт запрещен спецификацией — вызов import() приведет к ошибке.
Сервис-воркеры могут быть зарегистрированы только в области Window в некоторых или во всех браузерах, так как объект ServiceWorker не доступен для DedicatedWorkerGlobalScope и SharedWorkerGlobalScope. Проверьте совместимость браузеров для получения информации.
Свойства экземпляра
Интерфейс ServiceWorker наследует свойства от своего родителя, EventTarget.
-
ServiceWorker.scriptURLТолько для чтения -
Возвращает сериализованный URL-адрес скрипта
ServiceWorker, определенный как частьServiceWorkerRegistration. URL-адрес должен быть на том же происхождении, что и документ, который регистрируетServiceWorker. -
ServiceWorker.stateТолько для чтения -
Возвращает состояние сервис-воркера. Возвращает одно из следующих значений:
parsed,installing,installed,activating,activated, илиredundant.
Методы экземпляра
Интерфейс ServiceWorker наследует методы от своего родителя, EventTarget.
ServiceWorker.postMessage()-
Отправляет сообщение — состоящее из любого структурированного клонируемого объекта JavaScript — в сервис-воркер. Сообщение передается сервис-воркеру с помощью события
messageв его глобальной области.
События
statechange-
Срабатывает при изменении
ServiceWorker.state. error-
Срабатывает при возникновении ошибки внутри объекта
ServiceWorker.
Примеры
Этот фрагмент кода взят из примера регистрации сервис-воркера (живая демонстрация). Код прослушивает любые изменения в ServiceWorker.state и возвращает его значение.
if ("serviceWorker" in navigator) {
navigator.serviceWorker
.register("service-worker.js", {
scope: "./",
})
.then((registration) => {
let serviceWorker;
if (registration.installing) {
serviceWorker = registration.installing;
document.querySelector("#kind").textContent = "installing";
} else if (registration.waiting) {
serviceWorker = registration.waiting;
document.querySelector("#kind").textContent = "waiting";
} else if (registration.active) {
serviceWorker = registration.active;
document.querySelector("#kind").textContent = "active";
}
if (serviceWorker) {
// logState(serviceWorker.state);
serviceWorker.addEventListener("statechange", (e) => {
// logState(e.target.state);
});
}
})
.catch((error) => {
// Something went wrong during registration. The service-worker.js file
// might be unavailable or contain a syntax error.
});
} else {
// The current browser doesn't support service workers.
// Perhaps it is too old or we are not in a Secure Context.
}
Спецификации
| Спецификация |
|---|
| Service Workers # serviceworker-interface |
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
ServiceWorker |
40 | 17 | 44 | 27 | 11.1 | 40 | 44 | 27 | 11.3 | 4.0 | 40 |
ecmascript_modules |
91 | 91 | Нет | 77 | 15["Поддержка вложенных рабочих процессов была добавлена в Safari 15.5.", "Загрузка скриптов во вложенных рабочих процессах была добавлена в Safari 16.4."] |
91 | Нет | 64 | 15["Поддержка вложенных рабочих процессов была добавлена в Safari на iOS 15.5.", "Загрузка скриптов во вложенных рабочих процессах была добавлена в Safari на iOS 16.4."] |
16.0 | 91 |
error_event |
40 | 17 | 44 | 27 | 11.1 | 40 | 44 | 27 | 11.3 | 4.0 | 40 |
postMessage |
40 | 17 | 44 | 27 | 11.1 | 40 | 44 | 27 | 11.3 | 4.0 | 40 |
scriptURL |
40 | 17 | 44 | 27 | 11.1 | 40 | 44 | 27 | 11.3 | 4.0 | 40 |
state |
40 | 17 | 44 | 27 | 11.1 | 40 | 44 | 27 | 11.3 | 4.0 | 40 |
statechange_event |
40 | 17 | 44 | 27 | 11.1 | 40 | 44 | 27 | 11.3 | 4.0 | 40 |
См. также
© 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/ServiceWorker