2016-01-08 11 views
9

TL; DR - 最初に更新した後ではなく、サービス担当者が初めてサイトにアクセスした直後にサービスを開始します。サービスワーカーを使用して、自分のサイトの最初の負荷でリクエストを傍受しますか?

詳細:

私はサービス労働者を使用してプログレッシブWebアプリケーションを構築していますが、ユーザーがページを更新するまで(SWがインストールされている)最初の負荷に、それはすべてのネットワーク要求をインターセプトしないことに気づきました。

サービスワーカーは、インストール後すぐに要求を傍受することができますか?

答えて

13

確かに、下記のようにskipWaitingclients.claimの組み合わせを使用することができます。

これにより、サービスワーカーはすぐにページからのネットワーク要求を制御します。

self.addEventListener('install', event => { 
    // Bypass the waiting lifecycle stage, 
    // just in case there's an older version of this SW registration. 
    event.waitUntil(self.skipWaiting()); 
}); 

self.addEventListener('activate', event => { 
    // Take control of all pages under this SW's scope immediately, 
    // instead of waiting for reload/navigation. 
    event.waitUntil(self.clients.claim()); 
}); 
+2

これには何らかの欠点や欠点がありますか? (なぜこの動作はデフォルトではないのですか?) – mjs

+0

AFAICTこれは動作しません。これを行うhttps://github.com/gaye/bu​​g-1206947を参照してください。ただし、最初のページの読み込み時にswのリクエストは表示されません。 –

+0

私は見ている動作がハードリフレッシュを使用した結果かもしれないと思います。 (self.skipWaiting()とself.clients.claim()であっても上記のようにハードリフレッシュでサービスワーカーを使用することはできないようです。 –

関連する問題