data uri
data uri 是由 rfc 2397 定義的一種把小文件直接嵌入文檔的方案。通過如下語法就可以把小文件變成指定編碼直接嵌入到頁面中:
data:[<mime-type>][;base64],<data>
在上個世紀 html4.01引入了data uri方案 ,到今天為止除了ie6和ie7之外,所有主流瀏覽器都支持,但ie8對data uri的支持還是有限制的,只支持object(僅是圖片時)、img、input type=image、link和css中的url,且數據量不能大于32k。
優點:
缺點:
mhtml
mhtml是mime html (multipurpose internet mail extension html)的縮寫,是由rfc 2557定義的把一個多媒體的頁面所有內容都保存到同一個文檔解決方案。這個方案是由微軟提出從ie5.0開始支持,另外opera9.0也開始支持,safari可以把文件保存為.mht(mhtml文件的后綴)格式,但不支持顯示它。
mhtml和data uri還比較類似,有更強大的功能和更復雜的語法,并且沒有data uri中“無法被重復利用”的缺點,但mhtml使用起來不夠靈活方便,比如對資源引用的url在mht文件中可以是相對地址,否則必須是絕對地址。hedger在《cross browser base64 encoded images embedded in html》針對ie的解決方案使用的是相對路徑就是因為聲明了content-type:message/rfc822使ie按照mhtml來解析,如果不修改content-type則需要使用mhtml協議,這個時候必須使用絕對路徑,如《mhtml – when you need data: uris in ie7 and under》。
應用
data uri和mhtml兩者的配合可以完整的解決所有的主流瀏覽器,它們由于無法被緩存和重復利用的缺陷,所以并不適合直接在頁面中使用,但在css和javascript文件中對圖片適當地使用有非常大的優越性:
為了方便在css中實現data uri和mhtml,我寫了一個data uri & mhtml 生成器,你可以看利用其生成data uri & mhtml應用實例。
在css文件中使用應用mhtml時url必須使用絕對路徑,導致非常不靈活,所以可以考慮使用css expression來解決(demo),比如:
/*
http://old9.blogsome.com/2008/10/26/css-expression-reloaded/
http://dancewithnet.com/2009/07/27/get-right-url-from-html/
*/
*background-image:expression(function(ele){
ele.style.backgroundimage = 'url(mhtml:' +
document.getelementbyid('data-uri-css').getattribute('href',4) +
'!03114501408821761.gif)';
}(this));
新聞熱點
疑難解答