有些浏览器会缓存 js 和 css 文件,除非您强制刷新它们,否则无法刷新它们。什么是最简单的方法。
我刚刚实现了这个似乎有效的解决方案。
在您的页面上声明一个版本变量
public string version { get; set; }
从 web.config key 获取版本号
version = ConfigurationManager.AppSettings["versionNumber"];
在您的 aspx 页面中像这样调用 javascript 和样式表
<script src="scripts/myjavascript.js?v=<%=version %>" type="text/javascript"></script>
<link href="styles/mystyle.css?v=<%=version %>" rel="stylesheet" type="text/css" />
因此,如果您在 web.config 中将 version = 1.1 从 1.0 设置为您的浏览器将下载最新的文件,这有望让您和您的用户避免一些挫折。
是否有其他更好的解决方案,或者这是否会导致网站出现任何不可预见的问题?
最佳答案
我通过将最后修改的时间戳作为脚本的查询参数来解决这个问题。
我使用扩展方法完成此操作,并在我的 CSHTML 文件中使用它。 注意:此实现将时间戳缓存 1 分钟,因此我们不会过多地破坏磁盘。
扩展方法如下:
public static class JavascriptExtension {
public static MvcHtmlString IncludeVersionedJs(this HtmlHelper helper, string filename) {
string version = GetVersion(helper, filename);
return MvcHtmlString.Create("<script type='text/javascript' src='" + filename + version + "'></script>");
}
private static string GetVersion(this HtmlHelper helper, string filename)
{
var context = helper.ViewContext.RequestContext.HttpContext;
if (context.Cache[filename] == null)
{
var physicalPath = context.Server.MapPath(filename);
var version = $"?v={new System.IO.FileInfo(physicalPath).LastWriteTime.ToString("MMddHHmmss")}";
context.Cache.Add(filename, version, null,
DateTime.Now.AddMinutes(5), TimeSpan.Zero,
CacheItemPriority.Normal, null);
return version;
}
else
{
return context.Cache[filename] as string;
}
}
}
然后在 CSHTML 页面中:
@Html.IncludeVersionedJs("/MyJavascriptFile.js")
在呈现的 HTML 中,这显示为:
<script type='text/javascript' src='/MyJavascriptFile.js?20111129120000'></script>
关于javascript - 强制浏览器在 asp.net 应用程序中获取最新的 js 和 css 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185872/