ServiceWorkerGlobalScope

ServiceWorkerGlobalScopeサービスワーカー API のインターフェイスで、サービスワーカーのグローバル実行コンテキストを表します。

開発者は、サービスワーカーの状態が終了/再起動サイクルに渡って維持されないことを覚えておく必要があります。したがって、それぞれのイベントハンドラーは、それが裸の、既定のグローバル状態で呼び出されることを想定する必要があります。

いったん正しく登録されたら、サービスワーカーはメモリーとプロセッサーの力を温存するため、アイドル時であれば停止させることができます。アクティブなサービスワーカーは、例えば fetchmessage などのイベントに応じて自動的に再起動します。

加えて、同期リクエストはサービスワーカーでは許可されていません。非同期リクエスト、つまり fetch() メソッド経由で初期化されたものが使われます。

このインターフェイスは WorkerGlobalScope インターフェイスと、その親の EventTarget を継承しています。

EventTarget WorkerGlobalScope ServiceWorkerGlobalScope

インスタンスプロパティ

caches 読取専用

サービスワーカーに関連づけられた CacheStorage オブジェクトを保持します。

ServiceWorkerGlobalScope.clients 読取専用

サービスワーカーに関連付けられた Clients オブジェクトを保持します。

ServiceWorkerGlobalScope.registration 読取専用

サービスワーカーの登録を表す ServiceWorkerRegistration オブジェクトを保持します。

イベント

activate

ServiceWorkerRegistration が新しい ServiceWorkerRegistration.active ワーカーを得た時に発生します。

contentdelete Experimental

コンテンツ索引 (en-US)からアイテムが取り除かれたときに発生します。

fetch

fetch() が呼び出されたときに発生します。

install

ServiceWorkerRegistration が新しい ServiceWorkerRegistration.installing ワーカーを得た時に発生します。

message

メッセージを受信したときに発生します。制御中のページは MessagePort.postMessage() メソッドを使用してサービスワーカーにメッセージを送信することができます。サービスワーカーは任意で event.data.port で公開されている MessagePort を通じて、対応する制御中のページに返信することができます。

notificationclick

表示された通知をユーザーがクリックしたときに発生します。

notificationclose

表示された通知をユーザーが閉じたときに発生します。

sync

サービスワーカーのクライアントページから SyncManager.register (en-US) への呼び出しが行われたときに発生します。ネットワークが有効であるか、すぐに利用可能になるのであれば、直ちに同期が試みられます。

periodicsync Experimental

PeriodicSyncManager (en-US) を登録したときに指定した周期で発生します。

push

サーバーのプッシュ通知が届いたときに発生します。

pushsubscriptionchange

プッシュ通知への加入が無効化されたとき、または無効化されようとするとき (例えば、プッシュ通知の有効期限が設定されたとき) に発生します。

インスタンスメソッド

ServiceWorkerGlobalScope.skipWaiting()

現在のサービスワーカーの登録を、待ち状態からクライアントが使っている時のアクティブ状態に進めます。

ServiceWorkerGlobalScopeWorkerGlobalScope を実装しています。このため利用できる以下のプロパティもあります。

fetch()

リソース取得 (fetch) のプロセスを開始します。これはリクエストのレスポンスを表す Response オブジェクトを解決するプロミスを返します。このアルゴリズムはサービスワーカーコンテキストに渡されるフェッチ処理のエントリーポイントです。

このコードスニペットは、service worker prefetch の例prefetch の例のライブ版を参照してください)からのものです。 onfetch イベントハンドラーは fetch イベントを監視します。イベントが発生した時、コードは Cache オブジェクト内で、最初に一致したリクエストに対して解決するプロミスを返します。もし、何も一致しなかった場合は、コードはネットワークからレスポンスを読み取ります。

さらに、このコードは fetch() 操作で発生した例外を処理しています。 HTTP のエラーレスポンス(たとえば、404)は、例外を引き起こさないことに注意してください。適切なエラーコードセットを持った通常のレスポンスオブジェクトを返します。

self.addEventListener("fetch", (event) => {
  console.log("Handling fetch event for", event.request.url);

  event.respondWith(
    caches.match(event.request).then((response) => {
      if (response) {
        console.log("Found response in cache:", response);

        return response;
      }
      console.log("No response found in cache. About to fetch from network…");

      return fetch(event.request).then(
        (response) => {
          console.log("Response from network is:", response);

          return response;
        },
        (error) => {
          console.error("Fetching failed:", error);

          throw error;
        }
      );
    })
  );
});

仕様書

Specification
Service Workers
# serviceworkerglobalscope-interface

ブラウザーの互換性

BCD tables only load in the browser

関連情報