把JS和CSS合併到1個文件

合併JS文件和CSS文件很多人都知道,也用過,目的是爲了減少請求數。但有時候我們覺的把JS合併到1個文件,CSS又合併到另外1個文件也是浪費,我們如何能把CSS和JS一起合併進1個文件了?

這裏需要使用1個常見的註釋符<!-- 主要是利用css,js解析器對<!-- 進行不同的解析來實現JS和CSS合併的。

   1. CSS解析器 會忽略<!--符號,
   2. JS解析器會把<!--當作註釋符號,與// 註釋相同。

看看下面的列子:   
 <HEAD>
  <TITLE>test</TITLE>
  <style type="text/css">
   <!--.d{color:red;}
  </style>
  <script>
    <!-- function showMsg(m){alert(m);}
  </script>
 </HEAD>
 <BODY>
   <div class='d'>顏色變成紅色</div>
   <input type="button" value="不會彈出" onclick="showMsg('js');" />
 </BODY>
  
運行上面的代碼,會發現CSS是正常的,而JS確失效了,因爲上面的代碼等價於: 
  <style type="text/css">
   .d{color:red;}
  </style>
  <script>
    // function showMsg(m){alert(m);}
  </script>

利用這個特性,我們就可以實現把js和CSS合併到1個文件中:
  
  test.jscss 文件
  <!-- /* 
   function showMsg(m){
    alert(m);
  }
  <!-- */ 

  <!-- .d{color:red;} 

index.html
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
    <title>test</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <script type="text/javascript" language="javascript"  src="test.jscss"></script>
    <link rel="stylesheet" rev="stylesheet" type="text/css" href="test.jscss" />
  </head>
 <body>
   <div class='d'>顏色變成紅色</div>
   <input type="button" value="不會彈出" onclick="showMsg('js');" />
 </body>
</html>

 上面代碼的JS和CSS都能正常運行,雖然test.jscss被鏈接了2次,但因爲緩存的原因,其實只會下載一次。

    注:上面代碼中chrome中運行有問題,這是因爲chrome中下載同1個文件之後只解析一次,比如你先用<script 加載了test.jscss,chrome就會使用js解析器來解析test.jscss,而當你再用link加載test.jscss文件的時候,chrome會直接把用js解析器解析後文件傳遞給link,而不會使用css解析器再解析一次,這就導致上面的代碼只有js生效,而css無效,如果把link標籤放在前面,則js會失效。目前還沒找到很好的解決版本,雖然可以在第二次加載的時候在url後帶1個參數解決,但這樣又變成2次請求了。希望有知道的朋友指點下。

轉自:http://www.blogjava.net/BearRui/archive/2010/04/18/combin_css_js.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章