首页 > 其他分享 >前端VUE自动检测版本更新

前端VUE自动检测版本更新

时间:2023-05-05 10:26:31浏览次数:39  
标签:VUE const 自动检测 前端 更新 js result newScripts 页面

前言
当用户在当前站点停留时间比较长,中途站点进行升级更新之后,用户如果不刷新页面就任然停留在旧的页面里,如何让用户收到一个提示,引导用户进行更新操作呢?下面给大家介绍如何站点更新如何在生产环境提示用户更新,进行页面刷新操作,核心原理其实很简单。

一、思路
1,每隔一小段时间fetch请求一次服务器首页数据,解析为纯文本。
2,识别纯文本里对应script标签路径文件指纹是否发生变动
3,有变动则弹框提示引导用户进行刷新操作

二、实现步骤

1.调用fetch拿到首页的html并且转为纯文本格式

核心代码:

fetch('/').then(res=>res.text()).then(res=>console.log(res))

返回结果

由于VUE是单页面返回数据不多一目了然

<!DOCTYPE html>
<html lang=en>
<head>
  <meta charset=UTF-8>
  <link rel=icon href=./favicon.ico> <meta name=viewport content="width=device-width,initial-scale=1">
  <script type=module crossorigin src=./assets/index.b3865953.js> </script> 
  <body>
    <div id=app></div><script src=./js/WsUtil.js type=text/javascript charset=utf-8></script>
  </body>
</html>

 

仔细观察返回数据不难发现script标签里的 <script type=module crossorigin src=./assets/index.b3865953.js> </script> 所对应的文件路径是./assets/index.b3865953.js 这是由于前端工程化会自动给文件带上文件指纹,只要这些文件有变动,那么这些文件指纹也就是hash值也会跟着变化,每隔一小段时间去分析页面中script元素的js,只要发现js路径有变化,说明这个系统是有所改动。

具体代码如下:

//请求首页,timestep是为了避免缓存数据

//请求首页
let lastSrcs // 存储路径
const scriptReg = /<script.*?src="(.*?)"/g; // 解析请求回来的html值
async function getScripts() {
  const html = await fetch('/?timestep=' + Date.now()).then((res) => res.text());
  scriptReg.lastIndex = 0;// 正则分析页面所有url地址
  const result = [];
  let match;
 
  while ((match = scriptReg.exec(html))) {
    result.push(match[1]);
  }
  return result;
}

2.检查是否需要更新

首先调用newScripts拿到当前页所有js路径

async function needUpdate(){
    const newScripts = await getScripts();//调用newScripts
    if(!lastSrcs){//如果之前没有保存页面js地址的话,进行一次保存,初始化并存下当前数据
        lastSrcs = newScripts;
        return false;
      }
      let result = false ;
      if(lastSrcs.length !== newScripts.length){
        result = true;
      }
      for(let i = 0;i<lastSrcs.length;i++){
        if(lastSrcs[i] !== newScripts[i]){
          result = true;
          break ;
        }
    }
    lastSrcs = newScripts;
    return result;
  }

 

3.有则弹出

每隔两秒调用 needUpdate检查更新函数,判断是否有变化,有更新则提示用户刷新页面,然后在调用自身,不断的进行检查,从而达到提示更新的目的。

const timeData = 2000;//检查间隔时间

function autRef() {
    setTimeout(async () => {
        const willUp = await needUpdate();//调用检查更新函数
        if (willUp) {
            const result = confirm('数据更新点击确认刷新当前页')
            if (result) {
                location.reload();//刷新当前页
            }
        };
        autRef();
    }, timeData)
}

autRef();

引入main.js文件里面就可以正常使用了

 

标签:VUE,const,自动检测,前端,更新,js,result,newScripts,页面
From: https://www.cnblogs.com/tcyweb/p/17373332.html

相关文章

  • vue中配置使用axios
    简单示例代码:请求网络的js逻辑,可以放到request.js文件中,放在目录utils下;importaxiosfrom"axios";axios.defaults.withCredentials=true;//创建axios实例constinstance=axios.create({//`headers`请求头的通用配置headers:{//'X-Requested-W......
  • 前端
    前端基础CSSJavaScript框架VUE框架......
  • java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,附源码+
    1、项目介绍java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,实现管理员:首页、个人中心、公告信息管理、院系管理、班级管理、学生管理、宿舍信息管理、宿舍安排管理、卫生检查管理、报修信息管理、报修处理管理、缴费信息管理,学生;首页、个人中心、公......
  • 弹幕标签(跑马灯)用法(前端开发小技能)
    弹幕标签1、注意弹幕标签marquee,现在一些浏览器是不支持的2、弹幕标签也叫跑马灯marquee格式及其含有的属性1、基本格式<marquee></marquee>2、一些属性1)direction属性:表示的是弹幕行走的方向,如下面实现向左行走<marqueedirection="left">这波操作6</marquee>其中direction还可以......
  • 9. CMDB前端开发(上)
    CMDB前端开发(上)大纲登录页面后台基本布局登录页面前端代码架构可以参考:https://blog.51cto.com/devwanghui/6193473开发前预览页面仪表盘占位页面开发创建视图:devops_web/src/views/dashboard/Dashboard.vue<template>这是仪表盘</template><script>......
  • vue 选择图片或者拍照上传,数据在外层取不到/拿不到解决。
    <inputtype="file"accept="image/*"capture="camera"@change="onImageChange"class="inputClass"/>//调用asynconImageChange(e){this.capImg=awaitthis.onImageChange(e)console......
  • vue-esign 学习笔记
    1注意事项最新版是1.1.4,我们项目组用的是1.1.0。从npmjs可以看出,两个版本中间的版本都是不可用的,下载量为0.除此之外还可以参考的类似工具:https://www.npmjs.com/package/vue-esignaturevue-esignaturehttps://www.npmjs.com/package/vue3-esignvue3-esign2链接地址http......
  • Vue3 h函数渲染组件
    1、渲染ElSelect组件constmodulleFilters=ref([{label:1,value:2},{label:2,value:3},]);constsearch=ref('');consttableColumn=[{prop:'module',label:'模块',headerRender:()=>h(......
  • vue el-input中点击符号,文本框中显示符号
    需求点击+|()符号,页面中光标位置,展示对应的符号点击完,光标留在原位 代码<el-form-itemprop="kwspec"label='监测关键词'><el-inputtype="textarea"placeholder="请输入监测关键词"ref="inputRef"@blur="inputBlur"v-model=&q......
  • Vue.js 教程:如何使用 Mock.js 进行前端开发
    Mock.js 是常用的生成随机数据,拦截Ajax请求的JavaScript库。在软件开发的初期,后端API接口可能还没有实现或者还没有完全实现。在这种情况下,用Mock.js可以模拟后端API供前端开发人员调用,从而避免等待后端API的完成。要在Vue项目中使用Mock.js有两个思路:在客户端拦......