Beschreibung:Service-Worker skipWaiting nicht in der Lage zur Zeit aktivieren SW warten
Wir sw precache verwenden die Skripte vor der Hand für das Caching, damit die Skripte aktualisieren wir Reload-Option geben, für, dass wir das hören überspringen Arbeiter Nachricht der neu installieren Servicemitarbeiter aus unbekanntem Grund warten wir nicht richtig
importScript
// GETTING OLD SW reference (self) and NOT getting newly installed SW reference
self.addEventListener('message', function(event) {
*// not working*
self.skipWaiting();
});
// But if we put skipWaiting() in 'install' listener
// it is getting correct new SW reference and working correctly
self.addEventListener('install', function(event) {
// self.skipWaiting();
});
bekommen
SW Registrierung
if('serviceWorker' in window.navigator) {
window.addEventListener('load', function() {
window.navigator.serviceWorker.register("/serviceWorker.js").then(function(registration) {
console.log("ServiceWorker registration successful with scope: ", registration);
registration.onupdatefound = function() {
console.log('NEW WILD WORKER HAS SPAWNED.!', registration);
var installedWorker = registration.installing;
installedWorker.onstatechange = function() {
if (installedWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
console.log('Updated content is available RELOAD!', navigator.serviceWorker.controller);
var el = document.getElementById('feature');
el.style['display'] = 'block';
}
}
}
}
}).catch(function(error) {
console.error("ServiceWorker registration failed: ", error);
});
});
window.navigator.serviceWorker.addEventListener('controllerchange', function() {
console.log('SERVICE WORKER UPDATED');
});
}
webpack Config
new SWPrecacheWebpackPlugin({
cacheId: 'pwa',
filename: 'serviceWorker.js',
staticFileGlobsIgnorePatterns: [/\.map$/, /\.json$/, /_nch\.[0-9a-z]+\.[js, css]+/g, /webpackManifest\.[0-9a-z]+\.js/g, /.DS_Store\.[0-9a-z]+/g],
importScripts: ['offline/offline.1a2b3c4df1.js'],
dontCacheBustUrlsMatching: /./,
minify: false,
skipWaiting: false,
runtimeCaching: [ {
urlPattern: /_nch\.[0-9a-z]+\.[js, css]+/g,
handler: 'fastest',
options: {
cache: {
name: 'jd-internal-script',
maxEntries: 10,
},
},
}, {
urlPattern: /webpackManifest\.[0-9a-z]+\.js/g,
handler: 'networkFirst',
options: {
cache: {
name: 'jd-root-doc',
},
},
}],
}),
Danke, dass Sie diese Arbeit gemacht haben.Kann ich für die Implementierung von Service-Mitarbeitern zur Workbox wechseln, da ich derzeit sw-precache und sw-toolbox verwende, um dies zu erreichen. Daher wäre es hilfreich, wenn Sie einige Ressourcen zur Workbox-Implementierung mit Webpack bereitstellen könnten. –
installingWorker.onstatechange in diesem wir erhalten Fehler installerWorker ist undefined, so dass anstelle von newSW verwendet werden muss? –
newSW.state = 'waiting' Dies erfüllt nicht statt dessen wir newSW.state = 'installiert'. Daher können wir den Wartezustand nicht anzapfen. –