ServiceWorker

Интерфейс ServiceWorker, являющийся частью ServiceWorker API, позволяет взаимодействовать с Service Worker. К одному Service Worker могут быть привязаны несколько контекстов (например страниц, Web Workers, и т.д.), каждый с использованием собственного объекта ServiceWorker.

Объект ServiceWorker можно получить через свойства ServiceWorkerRegistration.active и ServiceWorkerContainer.controller — это Service Worker, который активировал и контролирует текущую страницу (в случае, если Service Worker был успешно зарегистрирован и страница была обновлена)

Интерфейс ServiceWorker обрабатывает события жизненного цикла: install и activate и функциональные события, например fetch. Объект ServiceWorker также содержит опцию ServiceWorker.state, отражающую его состояние.

Свойства

Интерфейс ServiceWorker наследует свойства Worker.

ServiceWorker.scriptURL Только для чтения
URL кода для данного Service Worker. URL должен находиться в том же домене, что и документ, регистрирующий ServiceWorker.
ServiceWorker.state Только для чтения
Состояние данного Service Worker. Может иметь следующие значения: installing, installed, activating, activated или redundant.

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

ServiceWorker.onstatechange Только для чтения
Срабатывает при срабатывании события statechange; По сути, срабатывает при каждом изменении ServiceWorker.state.

Методы

Интерфейс ServiceWorker наследует все методы интерфейса Worker, кроме Worker.terminate, который не должен быть доступен для Service Worker.

Примеры

Этот фрагмент кода из примера событий Service Worker (демо). Данный код возвращает значение 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.
}

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

Спецификация Статус Комментарии
Service Workers
Определение 'ServiceWorker' в этой спецификации.
Рабочий черновик Изначальное определение.

Поддержка

Update compatibility data on GitHub
КомпьютерыМобильные
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung Internet
ServiceWorker
Экспериментальная
Chrome Полная поддержка 40Edge Полная поддержка 17
Полная поддержка 17
Полная поддержка 16
Отключено
Отключено From version 16: this feature is behind the Enable service workers preference.
Firefox Полная поддержка 44
Замечания
Полная поддержка 44
Замечания
Замечания Service workers (and Push) have been disabled in the Firefox 45 and 52 Extended Support Releases (ESR.)
IE Нет поддержки НетOpera Полная поддержка 27Safari Полная поддержка 11.1WebView Android Полная поддержка 40Chrome Android Полная поддержка 40Firefox Android Полная поддержка 44Opera Android Полная поддержка 27Safari iOS Полная поддержка 11.3Samsung Internet Android Полная поддержка 4.0
onstatechange
Экспериментальная
Chrome Полная поддержка 40Edge Полная поддержка 17
Полная поддержка 17
Полная поддержка 16
Отключено
Отключено From version 16: this feature is behind the Enable service workers preference.
Firefox Полная поддержка 44
Замечания
Полная поддержка 44
Замечания
Замечания Service workers (and Push) have been disabled in the Firefox 45 and 52 Extended Support Releases (ESR.)
IE Нет поддержки НетOpera Полная поддержка 27Safari Полная поддержка 11.1WebView Android Полная поддержка 40Chrome Android Полная поддержка 40Firefox Android Полная поддержка 44Opera Android Полная поддержка 27Safari iOS Полная поддержка 11.3Samsung Internet Android Полная поддержка 4.0
scriptURL
Экспериментальная
Chrome Полная поддержка 40Edge Полная поддержка 17
Полная поддержка 17
Полная поддержка 16
Отключено
Отключено From version 16: this feature is behind the Enable service workers preference.
Firefox Полная поддержка 44
Замечания
Полная поддержка 44
Замечания
Замечания Service workers (and Push) have been disabled in the Firefox 45 and 52 Extended Support Releases (ESR.)
IE Нет поддержки НетOpera Полная поддержка 27Safari Полная поддержка 11.1WebView Android Полная поддержка 40Chrome Android Полная поддержка 40Firefox Android Полная поддержка 44Opera Android Полная поддержка 27Safari iOS Полная поддержка 11.3Samsung Internet Android Полная поддержка 4.0
state
Экспериментальная
Chrome Полная поддержка 40Edge Полная поддержка 17
Полная поддержка 17
Полная поддержка 16
Отключено
Отключено From version 16: this feature is behind the Enable service workers preference.
Firefox Полная поддержка 44
Замечания
Полная поддержка 44
Замечания
Замечания Service workers (and Push) have been disabled in the Firefox 45 and 52 Extended Support Releases (ESR.)
IE Нет поддержки НетOpera Полная поддержка 27Safari Полная поддержка 11.1WebView Android Полная поддержка 40Chrome Android Полная поддержка 40Firefox Android Полная поддержка 44Opera Android Полная поддержка 27Safari iOS Полная поддержка 11.3Samsung Internet Android Полная поддержка 4.0

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Смотрите замечания реализации.
Смотрите замечания реализации.
Пользователь должен сам включить эту возможность.
Пользователь должен сам включить эту возможность.

Смотрите Также