10

编辑:我真诚的道歉!除了我自己之外,这对任何人都不是问题 - 我有一个 global.css 文件,其中包含正确的内容,但在它下面我在<head>我的 HTML 中包含了另一个包含旧 CSS 的文件。掌心。

我有一个正在开发的网站。我正在使用 LESS 来增强我的 CSS 以使其更易于编写。问题是,当我更改.less文件时,浏览器中呈现的样式拒绝更改。我查看了生成的.css文件,并且更新以反映所做的更改,但是浏览器不会从 CSS 文件更新它的呈现样式。我已经在 Chrome、FF(3 和 4) 和 Opera 中尝试过这个,但结果相同。

我什至告诉浏览器不要缓存任何东西,无论是 PHP 还是元标记,都无济于事。我的 Apache 配置文件几乎是普通的,虽然我使用了多个本地主机(这是一个本地服务器)。下面给出了用于将 LESS 转换为 CSS 的代码,并在每次重新加载页面时运行:

try 
{
    lessc::ccompile('global/global.less', 'global/global.css');
} 
catch(exception $ex) 
{
    exit('lessc fatal error:<br />' . $ex->getMessage());
}

这里没有例外。解析器检查文件是否已被修改,我删除了less.php一点,但是每次更改都会重新生成 CSS 文件,所以这一定是某个地方的浏览器的缓存问题...... Apache 提供了更新的 CSS 文件正好 :-/

抱歉说了这么久,但我想澄清一下。如果你还需要什么,请告诉我。

4

3 回答 3

20

一旦我在代码中看到使用时间戳来强制浏览器下载每个请求的css文件js,这样:

<link rel="stylesheet" type="text/css" href="http://www.example.com/style.css?ts=<?=time()?>" />

?ts=123456789只要数字与前一个不同,就会强制浏览器重新加载文件。

所以我采用了这个想法,但不是now使用时间戳,而是使用文件修改的时间戳style.css;所以它被缓存在浏览器中,直到在服务器上被修改:

<link rel="stylesheet" type="text/css" href="http://www.example.com/style.css?ts=<?=filemtime('style.css')?>" />
于 2011-04-13T12:01:05.423 回答
1

我正在使用 LESS 和 Laravel,我终于想出了一个好的解决方案:

在我的<head>标签中,我有:

<link rel="stylesheet/less" type="text/css" href="/less/main.less?ts={{FileHelper::getMostRecentModifiedTimeInFolder(realpath(public_path() . '/less'))}}" />

然后我还创建了一个 FileHelper 类(基于https://stackoverflow.com/a/6767411/470749):

<?php

class FileHelper {

    public static function getMostRecentModifiedTimeInFolder($path)
    {
        //https://stackoverflow.com/a/6767411/470749
        $iterator = new DirectoryIterator($path);
        $mtime = -1;
        foreach ($iterator as $fileinfo) {
            if ($fileinfo->isFile()) {
                if ($fileinfo->getMTime() > $mtime) {
                    $mtime = $fileinfo->getMTime();
                }
            }
        }
        return $mtime;
    }

}

我可能决定只在我的本地开发服务器上使用这种方法,并在生产中使用不同的方法,这样它就不会总是在每次页面加载时检查文件时间戳。

于 2014-01-24T20:38:32.390 回答
0

由于您无法控制浏览器缓存,我建议您为您的 css 文件提供版本。像 global.1.11.css。

于 2011-04-13T11:51:00.883 回答