script标签如何动态拼接时间戳 避免被缓存

948 阅读1分钟

以Vue单页面项目为例,如何引入ApiConfig.js域名文件添加时间戳

写法不同可能会导致达不到想要的效果

  • 问题1 :如果直接在script标签的src属性后面拼接时间戳,写法上不被允许

  • 问题2:如果头部动态创建script标签,会使js文件中声明的作用域变量在#app中获取不到

  • 问题3:如果在body中动态创建script标签,又会导致#app加载优先于script标签,找不到这个变量

  • 正确:故而采取以下方式创建

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>xxx</title>
    <!-- 问题2 -->
    <script>
        // createElement + appendChild
    </script>
  </head>
  <body id="body">
    <script type="module" src="/src/main.js"></script>
    <!-- 问题1 -->
    <!-- <script src="/ApiConfig.js?timer"+new Date().getTime()></script> -->
    <!-- 正确 -->
    <script>
      document.write('<script src="/ApiConfig.js?timer=' + new Date().getTime() + '"><\/script>')
    </script>
    <!-- 问题3 -->
    <script>
        // createElement + appendChild
    </script>
    <div id="app"></div>
  </body>
</html>