ServiceWorkerGlobalScope
========================

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

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

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

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

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

EventTarget

WorkerGlobalScope

ServiceWorkerGlobalScopeインスタンスプロパティ
-----------

`caches` 読取専用 

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

`ServiceWorkerGlobalScope.clients` 読取専用 

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

`ServiceWorkerGlobalScope.registration` 読取専用 

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

イベント
----

`activate`

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

`canmakepayment` (en-US) 
Experimental

決済アプリのサービスワーカーで発行され、決済を処理する準備ができたかどうかを調べるために使用されます。特に、販売者のウェブサイトが `new PaymentRequest()` を呼び出すと発行されます。

`contentdelete` 
Experimental

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

`fetch`

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

`install`

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

`message`

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

`notificationclick`

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

`notificationclose`

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

`paymentrequest` (en-US) 
Experimental

販売者のウェブサイトで `PaymentRequest.show()` メソッドを介して支払いフローが開始されたときに、支払いアプリで発行されます。

`sync`

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

`periodicsync` 
Experimental

`PeriodicSyncManager` を登録したときに指定した周期で発生します。

`push`

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

`pushsubscriptionchange`

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

インスタンスメソッド
----------

`ServiceWorkerGlobalScope.skipWaiting()`

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

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

`fetch()`

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

例
-

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

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


```js
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 with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* サービスワーカーの使用
* サービスワーカーの基本的なコード例
* Is ServiceWorker ready?
* `Promise`