2017-08-05 7 views
0

インストール時に動的ページをキャッシュする方法を理解しようとしていますか?私の現在のページは/product/1/viewServiceWorkerのインストール時のキャッシュ

self.addEventListener('install', function (event) { 
event.waitUntil(
     caches.open('kiosk-assets').then(function (cache) { 
      return cache.addAll([ 
       '/' // This is the problem it caches the origin path i need the current page cached. See register below 
       '/css/product.min.css' 
      ]) 
     }), 
.... 

ここに私の労働者を登録する方法です。これは、私は、これは可能性があることができれば、私は登録方法を変更することができます/product/1/view

window.navigator.serviceWorker.register('/sw.js', {scope: `/product/${id}/view`}) 

に登録されています。

+0

を - SW-プリキャッシュは、あなたがここにライブラリについて学ぶことができ、ニーズ

を満たす埋めるruntime-cachingのオプションを持っていますか?あなたが上記に投稿したもので登録が成功しましたか? スコープをログに記録して、スコープが希望どおりになっていることを確認できますか? –

+0

インストールイベントでは、swはそれが何を制御できるか分かりません。また、登録とアクティブ化の後でも、DOMが現在のURLを取得するように制御します。レジストラとワーカーの間にメッセージスレッドを用意し、メッセージにキャッシュする必要があります –

答えて

1

私はあなたがonInstall

少なくとも、それ自体によってサービスワーカーとのことを行うことができます、とは思いません。簡単な理由から、サービスワーカーがインストールされている間、どのクライアントが制御/制御しているのかはわかりません。

また、アクティブなサービススタッフであっても、DOMを制御できません。 したがって、現在のURLが何であるかを知る方法はありません。

あなたはそれをインストールしているときに、労働者に対してpingを実行し、クライアントが必要activate上のURLをキャッシュし、またはfetchイベント

または、

ことができます。

厳密onInstallを登録ページをキャッシュすることはあなたが必要なのは、それから、

が労働者に

if ('serviceWorker' in navigator) { 
navigator.serviceWorker.register('sw.js') 
    .then(function (success) { 
     console.log('scope', success.scope); 
     if (success.installing) { 
      let sw = success.installing; 
      sw.addEventListener('statechange', function (event) { 
       if (event.target.state == 'installed') { 
        let loc = window.location.toString(); 
        let message = { 
         action: 'cache', 
         location: loc 
        } 
        sw.postMessage(message); 
       } 
      }) 
     } 
    }); 
} 

を登録ページからpostMessage経由でメッセージを送信し、労働者の中にmessageイベントを使用する場合には、 URLをキャッシュする

0

データの静的および動的キャッシングには、おそらくsw-precacheライブラリを使用する必要があります。

ビルド環境(Gulp、Grunt、Webpack)と統合してください。 Sw-precacheはすべての静的ファイルを提供し、それに応じて更新します。あなたからSWを登録しているhttps://github.com/GoogleChrome/sw-precache

関連する問題