2017-08-02 12 views
8

サービスワーカーのHTMLページがあります。 サービスワーカーがindex.htmlファイルとmy JSファイルをキャッシュします。サービスワーカーのキャッシュをクリアするには?

私がJSを変更すると、問題はクライアントブラウザに直接表示されません。もちろん、chrome dev-toolsではキャッシュを無効にすることができます。しかし、クロームモバイルでは、どうしたらいいですか?

サイトの設定にアクセスして、[クリア]の[リセット]ボタンを押しました。 それでも、キャッシュから古いページ/ロードをロードします。 他のブラウザやシークレットを使用しようとしましたが、新しいページが読み込まれます。

次に、ブラウジングデータ(キャッシュのみ)をクリアしようとしていますが、それは機能します。

私はそれがうまくいかないと思いますか?私のユーザーは、クロムブラウザのキャッシュをクリアせずにページが更新されたかどうかわかりません。

答えて

10

使用この時代遅れのキャッシュを削除するには:

self.addEventListener('activate', function(event) { 
    event.waitUntil(
    caches.keys().then(function(cacheNames) { 
     return Promise.all(
     cacheNames.filter(function(cacheName) { 
      // Return true if you want to remove this cache, 
      // but remember that caches are shared across 
      // the whole origin 
     }).map(function(cacheName) { 
      return caches.delete(cacheName); 
     }) 
    ); 
    }) 
); 
}); 
+2

ここでは「自己」とは何ですか?ウィンドウオブジェクトまたはサービス担当者? – loopmode

+2

Stack Overflowでは、ソリューションが機能する理由を説明することをお勧めします。詳細については、[How To Answer](// stackoverflow.com/help/how-to-answer)を参照してください。 –

13

other answerは少し冗長ですし、質問のニーズよりも多くを行い、そして説明のその完全な欠如与えられ、それが代わってパースのビットを必要としますそれを彼らのために働くものに変えることができます。ここではもっと簡単です。

caches.delete(/*name*/); 

そして、あなたはすべてのキャッシュをワイプ(およびそれらを待たずしたい場合は、これを言う:あなたはキャッシュの名前を知っている場合

あなたは単にあなたが労働者に好きなどこからでもcaches.delete()を呼び出すことができますバックグラウンドタスクです)add this

caches.keys().then(function(names) { 
    for (let name of names) 
     caches.delete(name); 
}); 
+1

ありがとうございます。よりシンプルで分かりやすくなっています。私はちょうど質問に答えるためにすぐに鉱山を書いた –

+1

ナー心配しないでください。誰かが 'activate'リスナー内の特定のキャッシュセットを削除したい場合、あなたは完璧です。私はちょうど誰かが1つ/すべてをダンプしたい場合にこれをしました – Hashbrown

+0

最もコンパクトなコードはおそらく 'caches.keys()。then(cs => cs.forEach(c => caches.delete(c)))です。 または非同期関数の場合 '(await caches.keys())forEach(c => caches.delete(c))' –

関連する問題