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

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

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 来检测前端代码的更新并通知用户刷新浏览器以获取最新的代码。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 07:12:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 07:12:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 07:12:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 07:12:02       55 阅读

热门阅读

  1. 编写测试用例:策略、技巧与最佳实践

    2024-07-22 07:12:02       18 阅读
  2. 自动化测试的艺术:Xcode中GUI测试的全面指南

    2024-07-22 07:12:02       18 阅读
  3. C++基础语法:STL之容器(6)--序列容器中的forward_list

    2024-07-22 07:12:02       15 阅读
  4. MongoDB Map-Reduce 简介

    2024-07-22 07:12:02       15 阅读
  5. 【SpringBoot】第3章 SpringBoot的系统配置

    2024-07-22 07:12:02       16 阅读
  6. Python中with 关键字、tell() 和 seek() 方法

    2024-07-22 07:12:02       17 阅读
  7. 初识数据结构中的“栈”

    2024-07-22 07:12:02       17 阅读
  8. 44、PHP 实现数据流中的中位数(含源码)

    2024-07-22 07:12:02       16 阅读
  9. Python面试题:Python中的单例模式及其实现

    2024-07-22 07:12:02       18 阅读
  10. JVM 中的OopMap与安全点

    2024-07-22 07:12:02       17 阅读
  11. 在 Ubuntu 22.04/20.04 安装 CVAT 和 SAM 指南

    2024-07-22 07:12:02       20 阅读
  12. C++多线程编程中的锁详解

    2024-07-22 07:12:02       18 阅读
  13. 生成对抗网络(GAN):目标检测的新前沿

    2024-07-22 07:12:02       15 阅读