posts - 36, comments - 419, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          把JS和CSS合并到1個文件

          Posted on 2010-04-18 18:56 BearRui(AK-47) 閱讀(10705) 評論(6)  編輯  收藏 所屬分類: WEB
          合并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次請求了。希望有知道的朋友指點下。


          [作者]:BearRui(AK-47)
          [博客]: http://www.aygfsteel.com/bearrui/
          [聲明]:本博所有文章版權歸作者所有(除特殊說明以外),轉載請注明出處.
          英雄,別走啊,幫哥評論下:  

          精彩推薦 好文要頂 水平一般 看不懂 還需努力

          評論

          # re: 把JS和CSS合并到1個文件  回復  更多評論   

          2010-04-18 19:24 by FFF
          有點意思

          # re: 把JS和CSS合并到1個文件  回復  更多評論   

          2010-04-19 18:00 by HiMagic!
          挺有新意的用法,原創?

          # re: 把JS和CSS合并到1個文件  回復  更多評論   

          2010-04-19 20:57 by BearRui(AK-47)
          @HiMagic!
          呵呵,其實發現使用<!--來合并JS和CSS的并不是我,大概2,3年前就看到過文章使用這個來合并JS和CSS,不過一直沒去實踐過,最近實際使用了下,發現在chrome中有點問題,就順便寫出來。

          # re: 把JS和CSS合并到1個文件[未登錄]  回復  更多評論   

          2010-04-23 15:35 by john
          可以用來玩玩

          # re: 把JS和CSS合并到1個文件  回復  更多評論   

          2011-01-11 11:12 by tt
          不錯呀,但這個好像不能通用

          # re: 把JS和CSS合并到1個文件  回復  更多評論   

          2014-08-30 22:42 by 唐輝
          不建議優先利用bug做功能
          主站蜘蛛池模板: 津南区| 三穗县| 山西省| 平度市| 江孜县| 常州市| 广宗县| 临湘市| 怀安县| 新龙县| 井陉县| 新泰市| 大港区| 宜昌市| 冷水江市| 博乐市| 新蔡县| 平江县| 洛宁县| 旺苍县| 美姑县| 定日县| 耒阳市| 青田县| 漳浦县| 永福县| 厦门市| 南皮县| 浦县| 射洪县| 星子县| 鸡泽县| 汝城县| 察哈| 湖北省| 独山县| 吉木乃县| 雅安市| 屯门区| 宁都县| 丹江口市|