ベローにトリガされませんonupdatefound`私は私のserviceworkerを登録する方法である:serviceworkerは `モバイル
if ('serviceWorker' in navigator) {
window.addEventListener('load',() => {
function updateOnlineStatus() {
SnackBar.show({
text: navigator.onLine ? onlineMsg : offlineMsg,
backgroundColor: '#000000',
actionText: close,
actionTextColor: '#d2de2f',
customClass: 'custom-snackbar',
});
}
window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);
navigator.serviceWorker.register('sw.js').then((reg) => {
reg.onupdatefound =() => {
const installingWorker = reg.installing;
installingWorker.onstatechange =() => {
switch (installingWorker.state) {
case 'installed':
if (navigator.serviceWorker.controller) {
SnackBar.show({
text: refreshMsg,
backgroundColor: '#000000',
actionText: refresh,
actionTextColor: '#d2de2f',
onActionClick:() => { location.reload(); },
customClass: 'custom-snackbar',
});
} else {
console.info(availableMsg);
}
break;
case 'redundant':
console.info(redundantMsg);
break;
default:
break;
}
};
};
}).catch((e) => {
console.error(errorMsg, e);
});
});
}
このserviceworkerは仕事箱でビルド時に生成されます。これらの通知は、しかし決して私の携帯に(Ubuntuの+ chrome 59.0.3071.115
)私のコンピュータ上に表示されるので、
は、私は少し心配ですonupdatefound
は決してありませんように(android 6.0.1
+ chrome 59.0.3071.125
)
リモートデバッグ機能を使用して分析した後、それが見えます私の携帯電話で引き起こされる
私は、任意の提案やアドバイスが
を理解されるであろう
...ウェブサイトの新しいバージョンが保留されていることを知っているだろう、モバイル上の訪問者のことを考え、UXについては非常に悪い感じ編集1:このウェブページの「ブラウザの互換性」の詳細については、https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/onupdatefoundをご覧ください。 Android用Chromeのこの機能のサポートは不明です。
ブラウザでonupdatefound
イベントをサポートしていない場合は、フォールバック/回避策がありますか?
編集2:私は、
accept-ranges: bytes
cache-control: max-age=0, no-cache, no-store, must-revalidate
content-encoding: br
content-language: fr-FR
content-length: 1636
content-type: application/javascript; charset=utf-8
date: Fri, 21 Jul 2017 13:04:06 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT
last-modified: Tue, 18 Jul 2017 02:58:30 GMT
pragma: no-cache
をお勧めチューニング仕事箱の罰金について:
<Files sw.js>
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</Files>
生成:ジェフに応じて、
sw.js
ヘッダが.htaccess
ファイルで管理されていますまだ掘り下げる時間がありませんでしたので、簡単にworkbox-build
をgulpファイルに使用しています。しかし、私はうまくいけば
// Service Worker generation
gulp.task('bundle-sw', gulp.series('generate-sitemap',() => {
return wbBuild.generateSW({
globDirectory: gulpOutputDir,
swDest: `${gulpOutputDir}/sw.js`,
globPatterns: ['**/*.{html,png,xml,css,ico,txt,json,svg,js,map,gif,jpeg,jpg,bmp,cur,webp,woff2}'],
skipWaiting: true,
clientsClaim: true,
})
.then(() => {
console.warn('Service worker generated.');
})
.catch((err) => {
console.error(`[ERROR] This happened: ${err}`);
});
}));
あなたはそれがskipWaiting: true
が原因である可能性がありと思います:)でしょうか?
編集3:ありいけないtest
はクロム、モバイル、またはFirefox上のログにoutputedされた場合でも、更新メッセージは、Chromeのみ
https://developers.googleため
おかげで再び、それはクロームのデスクトップバージョンに取り組んでいたという紛らわしい事実、私はそれがマルチスレッドをサポートしなければならないからだと推測について
... .com/web/fundamentals/instant-and-offline/service-worker/lifecycle#handling_updatesあなたは、ドキュメントを見直した後、あなたのオブザーバーを改訂したいかもしれません。 –