我刚刚安静地度过了半天的疯狂。
我正在对Site.css文件中的类进行更改,但我的机器上正在开发的网站没有反映出来。因为我是在学习jQuery,并且正在使用addClass和removeClass玩耍,我正在动态创建这些调用的参数,所以我确定问题出在我的实现上。
结果发现浏览器中缓存了CSS文件,我只需要刷新一下就可以了...
有没有方法可以强制刷新(最好只在调试期间)?
一种广泛使用的“缓存破坏”方式是在你的CSS源文件末尾添加参数。通常使用时间戳。我更喜欢使用“文件最后修改”时间,即PHP中的filemtime()
函数。我相信在ASP.NET中也有类似的函数可以实现。
然后您的CSS标签会变成:
<link rel="stylesheet" type="text/css" media="screen" href="/main.css?123456789"/>
每当CSS文件更新时,查询参数会发生更改。
按下CTRL+F5可以强制刷新您的网页,包括脚本和样式表。
此外,您可以将样式表包含在动态服务器页面[php/asp.net]中,并使用Response.Expires = -1强制客户端在每个HTTP-GET请求中显式加载CSS。您还可以在Web服务器设置中为CSS mime类型执行此操作。
<link rel="stylesheet" type="text/css" href="cssfile.css?t=<%= DateTime.Now.Ticks %>" media="screen" />
对于ASP.NET,可以将以下代码放在一个实用程序类或主页面中:
public static string GetTimestampedUrl(string virtualPath)
{
var realPath = HostingEnvironment.MapPath(virtualPath);
var file = new FileInfo(realPath);
return VirtualPathUtility.ToAbsolute(virtualPath) + "?" + file.LastWriteTime.ToFileTime();
}
然后在您的页面中:
<link href="<%= GetTimestampedUrl("~/screen.css") %>" rel="stylesheet" type="text/css" media="screen" />
private void SetHeaderTimestamps()
{
HtmlHead head = (HtmlHead)Page.Header;
foreach (System.Web.UI.Control cntl in head.Controls)
{
if (cntl is HtmlLink)
{
HtmlLink cssTag = (HtmlLink)cntl;
cssTag.Href = Utility.GetTimestampedUrl(cssTag.Href);
}
}
}
- jrichview我的方法是使用“查询字符串更改”方法来绕过缓存(即使在浏览器和代理服务器中)。 由于我使用的是主控页,因此我像平常一样维护CSS链接,但添加了一个ID(此处命名为cssStyleSheet):
<head runat="server">
<link id="cssStyleSheet" href="~/Styles/Default.css" rel="stylesheet" type="text/css" />
然后在代码后端,我实现了Page_Load中的这行代码,添加了一个查询字符串,像这样“?t=5343423424234”。
Protected Sub Page_Load(…)
If IsNothing(Application("CSSTicks")) = True Then
Application("CSSTicks") = DateTime.Now.Ticks
End If
cssStyleSheet.Attributes("href") = cssStyleSheet.Attributes("href") & "?t=" & Application("CSSTicks")
End Sub
<link rel="stylesheet" href="<?php echo get_bloginfo('stylesheet_url')."?d=".date( 'Ymd', time()); ?>" type="text/css" media="screen" />
或者更好的一个
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); echo '?' . filemtime( get_stylesheet_directory() . '/style.css'); ?>" type="text/css" media="screen, projection" />
Cheers!
我不确定所有浏览器,但在IE8中,您可以使用开发人员工具...
转到:
工具 -> 开发人员工具(F12)
然后(在您的页面上)在开发人员工具中:
缓存 -> 始终从服务器刷新