如何在将JS文件引用到页面之前添加JS版本

目录

介绍

背景

第一种方法

第二种方法

参考


介绍

当涉及到部署在我们服务器上的最新代码时,我们总是会遇到问题。该页面缓存了JavaScript,因此我们对脚本的更新不会立即生效。

背景

下面的方法将让您了解如何让我们的页面知道脚本已经有更新版本,并且应该立即由页面进行评估。我们还应该考虑页面的性能,这就是为什么我们将对某些方法使用全局localstorage

第一种方法

此方法适用于隐藏代码的页面。

ASPX标记上,引用CSSJS文件,如下所:

<link rel="stylesheet" type="text/css" 
href="<%=AppendVersion("/Styles/myCSS.css")%>" /> 

ASPX代码隐藏上,添加以下代码:

Public Shared Function AppendVersion(ByVal filePath As String) As String 
        Dim fileInfo As FileInfo = New FileInfo(Current.Request.MapPath(filePath)) 
        Dim cacheVersion As String = fileInfo.LastWriteTime.ToFileTime.ToString 
 
        Return filePath & "?v=" & cacheVersion 
End Function

第二种方法

此方法适用于没有代码的页面。此外,我们将使用窗口localstorage。以下用于检测本地存储的代码片段来自本文中的Mathias Bynens

ASPX标记上,添加script

<script type="text/javascript"> 
//Start snippet detecting the global localstorage
var storage = (function() { 
      var uid = new Date, 
          storage, 
          result; 
      try { 
        (storage = window.localStorage).setItem(uid, uid); 
        result = storage.getItem(uid) == uid; 
        storage.removeItem(uid); 
        return result && storage; 
      } catch(e) {} 
    }());
//End of snippet

var cached = function(name,value) { 
   if(storage.getItem(name) != null){ 
      return (storage.getItem(name).indexOf(value) >= 0)? true : false ; 
   }else{return false;} 
}; 

var GetFile = function(path) { 
        return path.substring(path.lastIndexOf('/')+1); 
    }; 
var execScript = function (script) {
        //locally created function
        var newfunction = new Function(script);
        newfunction();
    };
function RefJSVersioning(objUrl){ 
    var req = new XMLHttpRequest(); 
    req.open('HEAD', objUrl, false); 
    req.send(null); 
    var headers = (Date.parse(req.getResponseHeader
                  ('Last-Modified'))/10000).toString().split('.')[0]; 
    var source = objUrl + '?' + headers; 
    var fn = GetFile(objUrl); 
    if (storage) { 
      if(storage.length > 0){ 
         if (!cached(fn + 'source',source)){ 
            req = new XMLHttpRequest(); 
            req.open('GET', objUrl, false); 
            req.send(null); 
            storage.removeItem(fn + 'source'); 
            storage.removeItem(fn + 'content'); 
            storage.setItem(fn + 'source', source); 
            storage.setItem(fn + 'content', req.responseText); 
            execScript(req.responseText); 
         }else{ 
            execScript(storage.getItem(fn + 'content')); 
         } 
      }else{ 
         req = new XMLHttpRequest(); 
         req.open('GET', objUrl, false); 
         req.send(null); 
         storage.setItem(fn + 'source', source); 
         storage.setItem(fn + 'content', req.responseText); 
         execScript(req.responseText); 
      } 
    } 
};  

</script>

如何使用:

<script type="text/javascript"> 
    RefJSVersioning("/Scripts/myScript.js");
</script>

存储在本地存储上的脚本的屏幕截图:

此方法也适用于在i帧内显示的页面。

参考

https://www.codeproject.com/Tips/802462/How-to-Add-JS-Version-before-Referencing-JS-File-t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值