2017-01-16 11 views
0
私は、Web用のプッシュ通知をチェックアウトされていると、次のスニペットに

サービスワーカーが複数いる場合、Navigator.serviceWorkerはどのように解決しますか?複数のサービス労働者が存在する場合

navigator.serviceWorker

を実行した

これはどのように解決するのでしょうか?それは最後に登録されたサービスワーカーを返しますか?

このドキュメントでは、ドキュメントは私には分かりません。

答えて

4

Jake Archibaldの "The Service Worker Lifecycle"はすばらしいリソースです。読んでいない場合は、そうすることをおすすめします。

各サービスワーカーは、それぞれscopeです。既定では、最も許容度の高いスコープは、サービスワーカースクリプトが提供されるディレクトリと同じです。必要に応じて、navigator.serviceWorker.register()に電話すると、より限定的な範囲に渡すことができます。

指定された起点に対して異なるスコープを持つ複数のサービスワーカーを登録することは可能です。 (脇:あなたが与えられた起源のため同じ範囲で複数のサービス労働者を登録しようとした場合でも、サービス労働者have different URLs場合、以降の登録がない別の登録など、サービスワーカーupdatesのように扱われます)

複数のサービスワーカーが登録されている場合は、どちらがクライアントページを制御するかを判断するために、スコープがチェックされます。サービスワーカーwhose registered scope is most specificは、最も長い一致範囲であり、特定のクライアントページを制御するものです。

  • SW 1:

    したがって、例えば、対応するスコープと、次の2件のサービスワーカー登録を与え、/path/to/sw.jsをスコープに登録/path/to/

  • SW 2:/path/to/subdir/sw.js、スコープに登録/path/to/subdir/

クライアントページのURLが/path/to/index.htmlの場合、/path/to/が最も長い一致文字であるため、SW1がクライアントを制御しますスコープ

クライアントページのURLが/path/to/subdir/index.htmlの場合、SW 2がクライアントを制御します。 SW1のスコープが一致しても、SW2のスコープも一致し、SW2のスコープはより特定的である。

関連する問題