js/css文件修改后浏览器本地缓存解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js/css文件修改后浏览器本地缓存解决相关的知识,希望对你有一定的参考价值。

本文实例讲述了让html页面随js的修改来更新缓存的实现方法。分享给大家供大家参考。具体实现方法如下:

很多朋友都会碰到这样的情况:如果我们页面加载了js的话下次打开时也会是调用这个js缓存文件,但对于我们修改后调试和发布是非常的不方便了,本文就来谈论如何解决这一问题,下面一起来看看。

一、后台编写一个 UrlCommon的js/css url的连接操作类

技术分享
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Web;
 6 using System.Web.Optimization;
 7 
 8 namespace WebApp.Common
 9 {
10     public abstract class UrlCommon
11     {
12         public abstract string _defaultTagFormat { get; }
13         public abstract string _verTagFormat { get; }
14         protected internal virtual String ComputeSHA1(String fileName)
15         {
16             String hashSHA1 = String.Empty;
17             if (System.IO.File.Exists(fileName))
18             {
19                 using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
20                 {
21                     System.Security.Cryptography.SHA1 calculator = System.Security.Cryptography.SHA1.Create();
22                     Byte[] buffer = calculator.ComputeHash(fs);
23                     calculator.Clear();
24                     StringBuilder stringBuilder = new StringBuilder();
25                     for (int i = 0; i < buffer.Length; i++)
26                     {
27                         stringBuilder.Append(buffer[i].ToString("x2"));
28                     }
29                     hashSHA1 = stringBuilder.ToString();
30                 }
31             }
32             return hashSHA1;
33         }
34         public virtual IHtmlString Url(string url, bool ver = true)
35         {
36             string absUrl = System.Web.Optimization.Scripts.Url(url).ToString();
37             string strUrl = string.Format(this._defaultTagFormat, absUrl);
38             if (ver)
39             {
40                 string filePath = System.Web.HttpContext.Current.Server.MapPath(url);
41                 string verNum = this.ComputeSHA1(filePath);
42                 //if (!string.IsNullOrWhiteSpace(verNum) && verNum.Length > 16)
43                 //{
44                 //    verNum = verNum.Substring(0, 16);
45                 //}
46                 strUrl = string.Format(this._verTagFormat, absUrl, verNum);
47             }
48             return new HtmlString(strUrl);
49         }
50     }
51     public class UrlScript : UrlCommon
52     {
53         public static UrlScript Instance = new UrlScript();
54         public override string _defaultTagFormat
55         {
56             get { return "<script src=\\"{0}\\"></script>"; }
57         }
58         public override string _verTagFormat
59         {
60             get { return "<script src=\\"{0}?v={1}\\"></script>"; }
61         }
62     }
63     public class UrlStyle : UrlCommon
64     {
65         public static UrlStyle Instance = new UrlStyle();
66         public override string _defaultTagFormat
67         {
68             get { return "<link href=\\"{0}\\" rel=\\"stylesheet\\"/>"; }
69         }
70         public override string _verTagFormat
71         {
72             get { return "<link href=\\"{0}?v={1}\\" rel=\\"stylesheet\\"/>"; }
73         }
74     }
75 }
View Code

二、view页面添加智能提示

技术分享

三、使用方法

view页面添加css/js的方法

@UrlStyle.Instance.Url("~/CSS/monther-footer.css")

@UrlScript.Instance.Url("~/Scripts/common.js")

页面加载效果
技术分享

只要文件修改SHA1的值就会改变,对应的?v=xxxxxxx也会随着改变,这样浏览器就会自动下载新的文件,只要文件不做修改就可以用本地的缓存,两不误的好办法

以上是关于js/css文件修改后浏览器本地缓存解决的主要内容,如果未能解决你的问题,请参考以下文章

更改捆绑的 js/css 文件

web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

css,js文件后面加一个版本号

转载web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段

我的QQ浏览器不支持缓存了,每次后退都要刷新,怎么解决