这篇“Vue实现自动检测及版本更新的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue实现自动检测及版本更新的方法是什么”文章吧。
一、思路
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="https://www.19jp.com">
仔细观察返回数据不难发现script标签里的 <script type=module crossorigin src=./assets/index.b3865953.js> </script> 所对应的文件路径是./assets/index.b3865953.js 这是由于前端工程化会自动给文件带上文件指纹,只要这些文件有变动,那么这些文件指纹也就是hash值也会跟着变化,每隔一小段时间去分析页面中script元素的js,只要发现js路径有变化,说明这个系统是有所改动。
具体代码如下:
//请求首页,timestep是为了避免缓存数据
//请求首页
async function newScripts(){
const html = await fetch('/?timestep='+ Date.now()).then((res)=>res.text());
scriptReg.lastIndex = 0;//正则分析页面所有url地址
let result = [];//保存分析数据到一个数组里
let match;
while((match=scriptReg.exec(html))){
result.push(match.groups.src)
}
return result;//返回数组
}
//数组里就记录了这一次请求首页在首页当中所有的js的获取地址
2.检查是否需要更新
首先调用newScripts拿到当前页所有js路径
代码如下:
async function needUpdate(){
const newScripts = await newScripts();//调用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)
}
这里只做了个简单的弹窗,当然大家可以继续优化,可以写成任意自己想要的样子。
以上就是Vue实现自动检测及版本更新的方法是什么的详细内容,更多关于Vue实现自动检测及版本更新的方法是什么的资料请关注九品源码其它相关文章!