2011-04-13 335 views
10

編輯:我真誠的道歉!除了我自己之外,這不是一個問題 - 我有一個global.css文件,裏面包含正確的東西,但是在下面我包含了另一個帶有舊CSS的文件,位於我的HTML的<head>位中。捂臉。瀏覽器不會讀取更新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文件就好了: -/

對不起,這麼久了,但我想說清楚。如果你需要別的東西,請讓我知道。

回答

20

有一次,我在一個代碼看到了時間戳的使用,迫使瀏覽器下載cssjs文件每一項要求,即道:

<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')?>" /> 
+0

這解決了我煩人的問題。謝謝 – 2012-06-25 08:41:48

0

既然你無法控制瀏覽器緩存,我會建議你給你的CSS文件的版本。像global.1.11.css一樣。

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; 
    } 

} 

我可能決定只在我的本地開發服務器上使用這種方法,並使用不同的方法進行生產,因此它並不總是在每次頁面加載時檢查文件時間戳。

相關問題