web-dev-qa-db-ja.com

navigator.serviceWorkerは準備ができていません

サービスワーカーを正常に登録しましたが、コード

navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) {
    // Do we already have a Push message subscription?
    ....

ハング-関数は呼び出されません。どうして?

38
Larry K

問題は、service-worker.jsファイルがassetsサブディレクトリに保存されていたことです。

しないでください:service-worker.jsをroot of your app (以上)。そうすれば、アプリはサービスワーカーにアクセスできます。

HTML5Rocksの記事 を参照してください-

Registerメソッドの微妙な点の1つは、Service Workerファイルの場所です。この場合、Service Workerファイルはルートのドメイン。つまり、Service WorkerのスコープはOrigin全体になります。つまり、このService Workerは、このドメイン上のすべてのフェッチイベントを受け取ります。サービスワーカーファイルを/example/sw.jsに登録すると、サービスワーカーは、URLが/ example /(つまり/ example/page1 /、/ example/page2 /)で始まるページのフェッチイベントのみを表示します。

追加

新しい問題は、ページがハードリロードされると、サービスワーカーが準備ができなくなることです。その後のソフトページのリロードは正常に機能します。 Google自身のサンプルコードは失敗します。 Chromeバグレポートをご覧ください。

バグ修正はChrome 44。に含まれていました

72
Larry K

私の場合-タブを閉じてからもう一度開くだけです...

1
Darkowic