--- title: ServiceWorker slug: Web/API/ServiceWorker translation_of: Web/API/ServiceWorker ---
Интерфейс ServiceWorker, являющийся частью ServiceWorker API, позволяет взаимодействовать с Service Worker. К одному Service Worker могут быть привязаны несколько контекстов (например страниц, Web Workers, и т.д.), каждый с использованием собственного объекта ServiceWorker.
Объект ServiceWorker можно получить через свойства {{domxref("ServiceWorkerRegistration.active")}} и {{domxref("ServiceWorkerContainer.controller")}} — это Service Worker, который активировал и контролирует текущую страницу (в случае, если Service Worker был успешно зарегистрирован и страница была обновлена)
Интерфейс ServiceWorker обрабатывает события жизненного цикла: install и activate и функциональные события, например fetch. Объект ServiceWorker также содержит опцию {{domxref("ServiceWorker.state")}}, отражающую его состояние.
Интерфейс ServiceWorker наследует свойства {{domxref("Worker")}}.
ServiceWorker.installing, installed, activating, activated или redundant.statechange; По сути, срабатывает при каждом изменении {{domxref("ServiceWorker.state")}}.Интерфейс ServiceWorker наследует все методы интерфейса {{domxref("Worker")}}, кроме {{domxref("Worker.terminate")}}, который не должен быть доступен для Service Worker.
Этот фрагмент кода из примера событий Service Worker (демо). Данный код возвращает значение {{domxref("ServiceWorker.state")}} при каждом изменении состояния.
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js', {
scope: './'
}).then(function (registration) {
var 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', function (e) {
// logState(e.target.state);
});
}
}).catch (function (error) {
// Произошла ошибка при регистрации Service Worker.
// Файл service-worker.js может быть недоступным или содержать ошибки синтаксиса.
});
} else {
// Данный браузер не поддерживает Service Worker.
}
| Спецификация | Статус | Комментарии |
|---|---|---|
| {{SpecName('Service Workers', '#serviceworker', 'ServiceWorker')}} | {{Spec2('Service Workers')}} | Изначальное определение. |
{{Compat}}