サードパーティがサイトで Service Worker を実行するために提供するライブラリを作成しています。すべてのネットワーク リクエストをインターセプトする必要がありますが、必要に応じて独自の Service Worker を構築できるようにしたいと考えています。
両方の Service Worker に同じフェッチをインターセプトさせて、それらの間である種の優先順位/順序付けを提供することはできますか? あるいは、私が使用すべき他のパターンはありますか?
ありがとう
サードパーティがサイトで Service Worker を実行するために提供するライブラリを作成しています。すべてのネットワーク リクエストをインターセプトする必要がありますが、必要に応じて独自の Service Worker を構築できるようにしたいと考えています。
両方の Service Worker に同じフェッチをインターセプトさせて、それらの間である種の優先順位/順序付けを提供することはできますか? あるいは、私が使用すべき他のパターンはありますか?
ありがとう
いいえ、あなたがすることはできません。スコープごとに 1 つの Service Worker のみを登録できるため、スコープがより具体的でない限り、最新の Service Worker が前の Service Worker を追い出します。この場合、リクエストには最も具体的なものだけが参加します。
それにもかかわらず、複数のハンドラーをアタッチすることができfetch
、それらはすべてリクエストを処理するので、別のスクリプトで機能を記述し、ユーザーの Service Worker に を介してファイルを含めることができますimportScripts()
。
同期的に呼び出す最初のハンドラーevent.respondWith()
(実際には、このメソッドを非同期的に呼び出すことはできません) が優先され、呼び出しを試みる残りのハンドラーがスローされます。
優先順位付けと調整にはミドルウェアが必要です。ServiceWorkerWareまたはsw-toolboxを確認できます。