これは実験的な機能です。本番で使用する前にブラウザー実装状況をチェックしてください。

ServiceWorker API のインターフェイスである ServiceWorker は service worker に関するレファレンスを提供しています。様々なブラウザー環境(例えばページ、worker など)が同一の service worker に関連付けることができて、一意な ServiceWorker オブジェクト​からアクセスできます。 

ServiceWorker オブジェクトはプロバティServiceWorkerRegistration.activeServiceWorkerContainer.controllerプロパティ — これは起動された service worker でページを管理しています (そのservice workerが正常に登録されて管理されるページがリロードされています) — の中で利用可能です。

ServiceWorker インターフェイスへは、 installactivate 、そして fetch を含む機能的なイベントといったライフサイクルイベントのセットが送られます。ServiceWorker オブジェクトは、ライフサイクルに関係する ServiceWorker.state (状態) を持っています。

プロパティ

ServiceWorker インターフェイスは親となるWorkerからプロパティを継承します。

ServiceWorker.scriptURL 読取専用

ServiceWorkerRegistrationの一部と定義されたスクリプト URL にシリアライズされた ServiceWorker を返します。この URL はその ServiceWorker を登録している document と同一オリジン上でなければなりません。

ServiceWorker.state 読取専用
service worker の状態を返します。installing, installedactivating, activatedredundant のいずれかの値を返します。

イベントハンドラ

ServiceWorker.onstatechange 読取専用
statechange イベントが発火した際に呼び出されるEventListener プロパティです。このイベントは ServiceWorker.state が変更された際に発火されます。

メソッド

ServiceWorker インターフェイスは親であるWorkerインターフェイスからメソッドを継承していますが、Worker.terminate は例外です。このメソッドは service worker からアクセスされるべきではありません。

このコードスニペットは service worker registration-events sample (live demo)の一部です。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) {
        // 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.
}

仕様

仕様書 策定状況 コメント
Service Workers
ServiceWorker の定義
草案 初期定義

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung Internet
基本対応
実験的
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 完全対応 40Edge Mobile ? Firefox Android 完全対応 44Opera Android 完全対応 27Safari iOS 完全対応 11.1Samsung 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 完全対応 40Edge Mobile ? Firefox Android 完全対応 44Opera Android 完全対応 27Safari iOS 完全対応 11.1Samsung 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 完全対応 40Edge Mobile ? Firefox Android 完全対応 44Opera Android 完全対応 27Safari iOS 完全対応 11.1Samsung 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 完全対応 40Edge Mobile ? Firefox Android 完全対応 44Opera Android 完全対応 27Safari iOS 完全対応 11.1Samsung Internet Android 完全対応 4.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連

ドキュメントのタグと貢献者

このページの貢献者: Uemmra3, one-kelvin, shimazu, awesomest
最終更新者: Uemmra3,