No matching service worker detected. You may need to reload the page, or check that the service worker for the current page also controls the start of the URL from the manifest.
我的服务人员正在工作的东西。
我什至尝试使用其他两个 URL,它们都使用 HTTP。
现在我将向您展示代码,我正在使用:
site.webmanifest
{
...
"start_url": "/",
"display": "standalone"
...
}
为了创建我的 service-worker,我使用了 webpack 插件:WorkboxPlugin 结合 Laravel Mix:
webpack.mix.js
mix.webpackConfig({
plugins: [
build.jigsaw,
build.browserSync(),
build.watch(['source/**/*.md', 'source/**/*.php', 'source/**/*.scss', '!source/**/_tmp/*']),
new WorkboxPlugin.GenerateSW({
// these options encourage the ServiceWorkers to get in there fast
// and not allow any straggling "old" SWs to hang around
clientsClaim: true,
skipWaiting: true,
}),
],
output: {
publicPath: '/assets/build/', // fixes the output bug
},
});
它创建了 service-worker.js:
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
"/assets/build/precache-manifest.cb67a9edd02323d8ea51560852b6cc0d.js"
);
workbox.core.skipWaiting();
workbox.core.clientsClaim();
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
使用 precache-manifest.js
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "4e264a665cf5133098ac",
"url": "/assets/build//js/main.js"
},
{
"revision": "4e264a665cf5133098ac",
"url": "/assets/build/css/main.css"
},
{
"url": "/assets/build/images/vendor/leaflet/dist/layers-2x.png?4f0283c6ce28e888000e978e537a6a56"
},
{
"url": "/assets/build/images/vendor/leaflet/dist/layers.png?a6137456ed160d7606981aa57c559898"
},
{
"url": "/assets/build/images/vendor/leaflet/dist/marker-icon.png?2273e3d8ad9264b7daa5bdbf8e6b47f8"
}
]);
我应该如何处理这个警告?
最佳答案
我找到了解决方案!范围设置不正确。您需要了解,Service Worker 需要位于根文件夹中。
所以我的改变是:
webpack.mix.js
mix.webpackConfig({
plugins: [
build.jigsaw,
build.browserSync(),
build.watch(['source/**/*.md', 'source/**/*.php', 'source/**/*.scss', '!source/**/_tmp/*']),
new WorkboxPlugin.GenerateSW({
// these options encourage the ServiceWorkers to get in there fast
// and not allow any straggling "old" SWs to hang around
clientsClaim: true,
skipWaiting: true,
swDest: '../../service-worker.js', //Need to move the service-worker to the root
}),
],
output: {
publicPath: '/assets/build/', // fixes the output bug
},
});
现在我需要用新路径注册服务 worker
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js')
.then(reg => {
console.log('Registration succeeded. Scope is ' + reg.scope);
})
.catch(registrationError => {
console.log('SW registration failed: ', registrationError);
});
});
}
关于service-worker - PWA : No matching service worker detected. 您可能需要重新加载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596386/