service-worker - PWA : No matching service worker detected. 您可能需要重新加载页面

标签 service-worker progressive-web-apps workbox workbox-webpack-plugin

我收到此警告:

enter image description here

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.



我的服务人员正在工作的东西。

enter image description here

我什至尝试使用其他两个 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/

相关文章:

javascript - PWA : preventDefault not working with beforeinstallprompt

javascript - 如何使用 Node.js 在非常简单的 JS 文件中编辑对象

workbox - 如何缓存较大的文件以进行开发

javascript - 访问 chrome/firefox 图像缓存

javascript - 简单的 Vue.js 应用程序中存在大量未捕获( promise 中)的 DOMException 错误

ios - Angular Service Worker 不适用于 iOS 独立模式

service-worker - 手动重放由 workbox-background-sync 排队的请求

javascript - 为什么负载从 FCM 推送通知丢失?

html5-appcache - Service Worker和AppCache之间的比较

javascript - vue-cli 使用官方 pwa 插件创建的网站无法在离线模式下工作