2016-11-02 4 views
0

サービスワーカーに値を渡してインストール手順で使用できる方法はありますか?インストール作業中にサービス担当者に値を渡す方法はありますか?

例として、Webページのリソースがプロジェクトのリリースバージョン(resource-2.11/js/...)に基づくフォルダにある場合。ある時点で、ファイルの一部をキャッシュするにはresource-2.11を知る必要があります。この値を渡すことはできますか?

+1

実行時に動的に決定するのではなく、ビルドのステップにすることはできますか? – Timo

+0

@TimoStaええ、それは私の場合の問題を解決するだろう。 サービスマンが何かのパラメータを取ることができるかどうかを知ることはまだ可能でしょう。 – stef52

答えて

2

いくつかのアプローチがあります。

ビルド時にservice-worker.jsファイルを生成するのは、コメントに示唆されているように、おそらく適切なアプローチです。これには、service-worker.jsの内容を変更するだけでservice worker updateがトリガーされるため、バージョン付きプレフィックスに変更があるたびにinstallイベントが発生することが保証されます。

しかし、何らかの理由でそれを実行できない場合、「インストール中に利用可能なサービスワーカーに値を渡す方法」の一般的な質問に対する別の答えは、IndexedDBを使用することです。メインページから値を設定してサービスワーカーを登録すると、サービスワーカーは値を読み取ることができます。ただし、IndexedDBの値をメインページから変更すると、ではなく、がサービスワーカーの更新をトリガーすることに注意してください。

最後に、値が変更されたときにサービスワーカーの更新をトリガーする場合に使用できる別の方法がありますが、何らかの理由でビルドステップ中にservice-worker.jsを変更できません。と同等のサービスワーカー更新をトリガします

// From your web page: 
if ('serviceWorker' in navigator) { 
    const value = encodeURIComponent('some-parameter-value'); 
    const swUrl = `service-worker.js?_param=${value}`; 
    navigator.serviceWorker.register(swUrl); 
} 

// From your service worker: 
self.addEventListener('install', event => { 
    const selfUrl = new URL(self.location); 
    // Uses https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams 
    const parameterValue = selfUrl.searchParams.get('_param'); 
    // Do something with parameterValue 
}); 

異なるURLでサービスワーカーの登録:ページからそれを登録した場合にはservice-worker.jsの最後に追加のURLクエリパラメータとして値を含めることですservice-worker.jsの内容を変更してください。

関連する問題