javascript - 如何让浏览器看到 CSS 和 Javascript 的变化?

标签 javascript css http caching

CSS 和 Javascript 文件不会经常更改,因此我希望将它们缓存在网络浏览器中。但我也希望 Web 浏览器能够看到对这些文件所做的更改,而无需用户清除其浏览器缓存。还需要一个与版本控制系统(如 Subversion)配合良好的解决方案。


Some solutions I have seen involve adding a version number to the end of the file in the form of a query string.

Could use the SVN revision number to automate this for you: ASP.NET Display SVN Revision Number

您能否指定如何包含 Revision另一个文件的变量?在 HTML 文件中,我可以在 CSS 或 Javascript 文件的 URL 中包含修订号。

Subversion book它说关于修订:“这个关键字描述了这个文件在存储库中更改的最后一个已知修订”。

Firefox also allows pressing CTRL+R to reload everything on a particular page.

澄清一下,我正在寻找不需要用户自己做任何事情的解决方案。

最佳答案

我发现如果将文件的最后修改时间戳附加到 URL 的末尾,浏览器将在修改时请求文件。例如在 PHP 中:

function urlmtime($url) {
   $parsed_url = parse_url($url);
   $path = $parsed_url['path'];

   if ($path[0] == "/") {
       $filename = $_SERVER['DOCUMENT_ROOT'] . "/" . $path;
   } else {
       $filename = $path;
   }

   if (!file_exists($filename)) {
       // If not a file then use the current time
       $lastModified = date('YmdHis');
   } else {
       $lastModified = date('YmdHis', filemtime($filename));
   }

   if (strpos($url, '?') === false) {
       $url .= '?ts=' . $lastModified;
   } else {
       $url .= '&ts=' . $lastModified;
   }

   return $url;
}

function include_css($css_url, $media='all') {
   // According to Yahoo, using link allows for progressive 
   // rendering in IE where as @import url($css_url) does not
   echo '<link rel="stylesheet" type="text/css" media="' .
        $media . '" href="' . urlmtime($css_url) . '">'."\n";
}

function include_javascript($javascript_url) {
   echo '<script type="text/javascript" src="' . urlmtime($javascript_url) .
        '"></script>'."\n";
}

关于javascript - 如何让浏览器看到 CSS 和 Javascript 的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224/

相关文章:

javascript - 桥+命令模式

ruby - 如何使用 -X GET -G 选项将 curl 转换为 Ruby Net::HTTP?

c# - 如何在休息时检索请求域 URL?

javascript - 谷歌地图显示错误的地方

javascript - GMAP3通过ajax get填充多个标记地址

javascript - 我怎样才能并且应该从不同的文件加载我的 .js 文件以保持清洁?

html - Angular - 使用 NgStyle 动态更改 CSS 属性

javascript - ID 触发器在 innerHTML 中不起作用

html - 价格行为的滚动过渡动画。如何?

PHP、cURL 和 HTTP POST 示例?