Create-react-appには、サービスワーカーを登録するコードを含むregisterServiceWorker.jsファイルが付属しています。私はちょうどそれがどのように動作するかについて少し混乱しています。問題のコードは次のとおりです。このサービスワーカーコードを正確にトリガするにはどうすればよいですか?
function registerValidSW(swUrl) {
navigator.serviceWorker
.register(swUrl)
.then(registration => {
registration.onupdatefound =() => {
const installingWorker = registration.installing;
installingWorker.onstatechange =() => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// At this point, the old content will have been purged and
// the fresh content will have been added to the cache.
// It's the perfect time to display a "New content is
// available; please refresh." message in your web app.
console.log('New content is available; please refresh.');
} else {
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console.log('Content is cached for offline use.');
}
}
};
};
})
.catch(error => {
console.error('Error during service worker registration:', error);
});
}
その最初のコンソールログ、表示する1のために発生する必要がどのような「新しいコンテンツが利用可能であり、更新してください、」表示しますか?
具体的には、index.htmlが変更されたとき(スクリプトファイル名が変更された場合)にこのコードを実行する方法を具体的に示します。
大きな説明。だから私はこれについて間違った方法をしていますか? 'index.html'の変更を検出したいという希望の結果をどのように達成するでしょうか? – NewbieX2
index.htmlにcache-firstアプローチを使用しないでください。また、インデックスが変更されるたびにsw.jsが更新されるようにしてください。あるいは、App Shellアーキテクチャを適用してindex.htmlを頻繁に変更する必要がないように考えることをお勧めします。 – NOtherDev
これは、 'registration.onupdatefound'はサービス・ワーカーとして登録されたばかりの新しいアプリケーションが実行されたときにのみ実行されることを読んでいますか?以前に使用されたファイルに変更が加えられた場合はありませんか? 24時間ごとに「バージョンの変更」についてはどうでしたか?それはキャッシュされ、キャッシュは24時間ごとに有効期限が切れると言っていますか? – bplittle