前端部署后提示用户刷新页面

实现这个需求有很多方式,我这里推荐一个本人认为最佳的一个方案,无需循环调用接口,纯前端就可以实现,也非常欢迎大家评论这个方案的优劣

1. 注册 Service Worker

首先,在你的前端代码中注册 Service Worker。可以在你的主 JavaScript 文件(例如 index.jsmain.js)中添加以下代码:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js').then(registration => {
      console.log('Service Worker 注册成功:', registration);

      // 监听更新事件
      registration.onupdatefound = () => {
        const installingWorker = registration.installing;
        installingWorker.onstatechange = () => {
          if (installingWorker.state === 'installed') {
            if (navigator.serviceWorker.controller) {
              // 新的 Service Worker 已安装并控制页面,通知用户刷新
              console.log('新的内容可用,请刷新。');
              alert('新的版本可用,请刷新浏览器获取最新更新。');
            } else {
              console.log('内容缓存以供离线使用。');
            }
          }
        };
      };
    }).catch(error => {
      console.error('Service Worker 注册失败:', error);
    });
  });
}
2. 创建 Service Worker 文件

在你的项目根目录下创建一个名为 service-worker.js 的文件:

const CACHE_NAME = 'my-site-cache-v1';
const urlsToCache = [
  '/',
  '/styles/main.css',
  '/script/main.js',
  // 添加其他需要缓存的资源
];

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => {
        console.log('Opened cache');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => {
        if (response) {
          return response;
        }
        return fetch(event.request);
      })
  );
});

self.addEventListener('activate', event => {
  const cacheWhitelist = [CACHE_NAME];
  event.waitUntil(
    caches.keys().then(cacheNames => {
      return Promise.all(
        cacheNames.map(cacheName => {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});
3. 更新 Service Worker

当你对前端代码进行更新时,只需更新 service-worker.js 文件的内容(例如,改变缓存名称 CACHE_NAME 或添加新的文件到 urlsToCache)。浏览器会检测到 service-worker.js 文件的变化,并触发 updatefound 事件。

这样,当用户刷新页面时,新的前端代码会被加载,并且缓存也会被更新到最新版本。通过 Service Worker,你可以确保用户始终使用最新的前端代码,同时提供离线支持和更快的加载速度。

解释Service Worker:Service Worker 是一种在后台运行的脚本,允许你在没有打开网页的情况下对网络请求进行拦截和缓存管理。使用 Service Worker 可以实现离线支持、后台同步、推送通知等功能。在这里,我们利用 Service Worker 来检测前端代码的更新并通知用户刷新浏览器以获取最新的代码。

相关推荐
Cachel wood22 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端24 分钟前
0基础学前端-----CSS DAY9
前端·css
joan_8528 分钟前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui
m0_748236111 小时前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_748248941 小时前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_748235611 小时前
从零开始学前端之HTML(三)
前端·html
一个处女座的程序猿O(∩_∩)O3 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
hackeroink6 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者8 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart