web-dev-qa-db-ja.com

複数のサービスワーカーが同じフェッチリクエストをインターセプトすることはできますか?

サードパーティがサイトでサービスワーカーを実行するために提供するライブラリを作成しています。すべてのネットワーク要求をインターセプトする必要がありますが、必要に応じて独自のサービスワーカーを構築できるようにしたいと思います。

両方のサービスワーカーが同じフェッチをインターセプトし、それらの間で何らかの優先順位/順序を提供することはできますか?あるいは、使用する必要がある他のパターンがありますか?

ありがとう

22
owencm

いいえ、あなたがすることはできません。スコープごとに登録できるのは1つのサービスワーカーのみです。したがって、スコープがより具体的でない限り、 最新のキックは前のアウトをキックします 、この場合、リクエストには最も具体的なユーザーのみが参加します。

それでも、複数のfetchハンドラーをアタッチでき、それらすべてがリクエストを処理するため、別のスクリプトで機能を記述し、ユーザーのサービスワーカーに importScripts()

event.respondWith()を同期的に呼び出した最初のハンドラー(実際には、このメソッドを非同期的に呼び出すことはできません)が勝ち、呼び出ししようとしている残りのハンドラーがスローされます。

優先順位付けと調整にはミドルウェアが必要です。 ServiceWorkerWare または sw-toolbox を確認できます。

33
Salva