温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Vue实现自动检测及版本更新的方法是什么

发布时间:2023-03-31 14:24:40 来源:亿速云 阅读:117 作者:iii 栏目:开发技术

这篇“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=./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是为了避免缓存数据

        //请求首页
        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实现自动检测及版本更新的方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    vue
    AI