vue.js - 为什么 service worker 会自动下载新内容,但不更新?

标签 vue.js service-worker vue-cli

我这样注册 service worker:

/* eslint-disable no-console */

import { register } from 'register-service-worker'

if (process.env.NODE_ENV === 'production') {
  register(`${process.env.BASE_URL}service-worker.js`, {
    ready() {
      console.log('App is being served from cache by a service worker.');
    },
    registered() {
      console.log('Service worker has been registered.');
    },
    cached() {
      console.log('Content has been cached for offline use.');
    },
    updatefound() {
      console.log('New content is downloading.');
    },
    updated() {
      console.log('New content is available; please refresh.');
    },
    offline() {
      console.log('No internet connection found. App is running in offline mode.');
    },
    error(error) {
      console.error('Error during service worker registration:', error);
    }
  });
}

当我 vue-cli-service build --mode production 然后部署到服务器时,在线我可以正确地看到日志:

App is being served from cache by a service worker.
Service worker has been registered.
New content is downloading.
New content is available; please refresh.

似乎自动下载了内容,但从现在开始,它仍然总是显示新内容可用;请刷新(实际上,内容并没有刷新)。 好像不会自动刷新?只能下载吗?为什么?

如何在 updated() 上刷新?

最佳答案

我在这种情况下所做的是解决一个将为用户重新加载页面的 promise 。这很好,因为它会等待,然后在数据输入后重新加载页面。

/* eslint-disable no-console */

import { register } from 'register-service-worker'

if (process.env.NODE_ENV === 'production') {
  register(`${process.env.BASE_URL}service-worker.js`, {
    ready() {
      console.log('App is being served from cache by a service worker.');
    },
    registered() {
      console.log('Service worker has been registered.');
    },
    cached() {
      console.log('Content has been cached for offline use.');
    },
    updatefound() {
      console.log('New content is downloading.');
    },
    updated() {
      console.log('New content is available; please refresh.');
      Promise.resolve().then(() => { window.location.reload(true); });
    },
    offline() {
      console.log('No internet connection found. App is running in offline mode.');
    },
    error(error) {
      console.error('Error during service worker registration:', error);
    }
  });
}

关于vue.js - 为什么 service worker 会自动下载新内容,但不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63813454/

相关文章:

android - 如何在页面加载时自动显示键盘

javascript - Webpack:将变量注入(inject)静态 service-worker.js

javascript - 我的代码中的错误是警报,而不是 console.errors

vue.js - 是否可以使用 Vue 和/或 Angular 创建原生通用 Windows 应用程序?

amazon-web-services - 在 AWS Amplify 控制台上部署为 SPA 后,Nuxtjs 动态路由在页面重新加载时不起作用

javascript - 如何更新 PWA 中的 Service Worker 缓存?

javascript - VUE JS WEBPACK项目中如何通过<script>标签自动将NPM "dependencies"包含到index.html中?

vue.js - 如何使用 vue-cli-service build 命令复制 Assets ?

vue.js - 如何在 Nuxt 中覆盖特定模板中的全局元标记?

javascript - 如何在域下导航时停止添加未在 Service Worker 中声明的内容