39

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

両方の Service Worker に同じフェッチをインターセプトさせて、それらの間である種の優先順位/順序付けを提供することはできますか? あるいは、私が使用すべき他のパターンはありますか?

ありがとう

4

1 に答える 1

57

いいえ、あなたがすることはできません。スコープごとに 1 つの Service Worker のみを登録できるため、スコープがより具体的でない限り、最新の Service Worker が前の Service Worker を追い出します。この場合、リクエストには最も具体的なものだけが参加します。

それにもかかわらず、複数のハンドラーをアタッチすることができfetch、それらはすべてリクエストを処理するので、別のスクリプトで機能を記述し、ユーザーの Service Worker に を介してファイルを含めることができますimportScripts()

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

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

于 2016-03-15T07:27:01.967 に答える