深入解析HTML5中的Blob對象的使用

HTML5中的Blob對象和MYSQL中的BLOB類型在概念上是有點區(qū)別的。MYSQL中的BLOB類型就只是個二進制數(shù)據(jù)容器。而HTML5中的Blob對象除了存放二進制數(shù)據(jù)外還可以設(shè)置這個數(shù)據(jù)的MINE類型,這相當于對文件的儲存,其它很多二進制對象也是從這個對象繼承的。
在稍低版本的現(xiàn)代瀏覽器中,這個Blob對象還沒規(guī)范化,因此需要BlobBuilder之類的方式來創(chuàng)建。但是現(xiàn)在Blob已經(jīng)規(guī)范到可以直接new它的構(gòu)造器Blob來創(chuàng)建了,而且瀏覽器幾乎都已經(jīng)支持了這個方式,所以對于舊標準咱就沒必要糾結(jié)了。
- var data='<b style="font-size:32px;color:red;">次碳酸鈷</b>';
- var blob=new Blob([data],{"type":"text/html"});
- console.log(blob);
這樣我們就創(chuàng)建了一個Blob對象,注意Blob這個構(gòu)造器的參數(shù)比較詭異,第一個參數(shù)是一組數(shù)據(jù),所以必須是數(shù)組,即使像上面的例子一樣只有一個字符串也必須用數(shù)組裝起來。第二個參數(shù)是對這一Blob對象的配置屬性,目前也只有一個type也就是相關(guān)的MIME需要設(shè)置,使用key-value的方式也許是為了今后的擴展。
那么,把數(shù)據(jù)做成Blob有什么用呢?對于Blob對象,我們可以創(chuàng)建出一個URL來訪問它。使用URL對象的createObjectURL方法。
- var data='<b style="font-size:32px;color:red;">次碳酸鈷</b>';
- var blob=new Blob([data],{"type":"text/html"});
- onload=function(){
- var iframe=document.createElement("iframe");
- iframe.src=URL.createObjectURL(blob);
- document.body.appendChild(iframe);
- };
不僅是上面例子中的text/html,任何瀏覽器支持的類型都可以這么用。而且這個Blob-URL的生存周期是從創(chuàng)建到文檔釋放,不會造成資源的浪費。
Blob是一個HTML5中很基本的二進制數(shù)據(jù)對象,很多方法的操作參數(shù)都支持使用Blob,這個我一下也列舉不出??傊瑤缀跛袇?shù)類型是二進制數(shù)據(jù)的方法都支持使用Blob作為參數(shù)就對了。所以把數(shù)據(jù)做成Blob可以讓之后的一些列操作變得更方便。
方法
slice()
返回一個新的Blob對象,包含了源Blob對象中指定范圍內(nèi)的數(shù)據(jù).
- Blob slice(
- optional long long start,
- optional long long end,
- optional DOMString contentType
- };
參數(shù)
start 可選
開始索引,可以為負數(shù),語法類似于數(shù)組的slice方法.默認值為0.
end 可選
結(jié)束索引,可以為負數(shù),語法類似于數(shù)組的slice方法.默認值為最后一個索引.
contentType 可選
新的Blob對象的MIME類型,這個值將會成為新的Blob對象的type屬性的值,默認為一個空字符串.
返回值
一個新的Blob對象,包含了源Blob對象中指定范圍內(nèi)的數(shù)據(jù).
注意
如果start參數(shù)的值比源Blob對象的size屬性的值還大,則返回的Blob對象的size值為0,也就是不包含任何數(shù)據(jù).
BlobPropertyBag
一個包含有兩個屬性type和endings的對象.
type
設(shè)置該Blob對象的type屬性.
endings(已廢棄)
對應(yīng)于BlobBuilder.append()方法的endings參數(shù).該參數(shù)的值可以是"transparent"或者"native".
Blob構(gòu)造函數(shù)用法舉例
下面的代碼:
- var aFileParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];
- var oMyBlob = new Blob(aFileParts, { "type" : "text\/xml" }); // the blob
等價于:
- var oBuilder = new BlobBuilder();
- var aFileParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];
- oBuilder.append(aFileParts[0]);
- var oMyBlob = oBuilder.getBlob("text\/xml"); // the blob
BlobBuilder接口提供了另外一種創(chuàng)建Blob對象的方式,但該方式現(xiàn)在已經(jīng)廢棄,所以不應(yīng)該再使用了.
例子:使用類型數(shù)組和Blob對象創(chuàng)建一個對象URL
- var typedArray = GetTheTypedArraySomehow();
- var blob = new Blob([typedArray], {type: "application/octet-binary"}); // 傳入一個合適的MIME類型
- var url = URL.createObjectURL(blob);
- // 會產(chǎn)生一個類似blob:d3958f5c-0777-0845-9dcf-2cb28783acaf這樣的URL字符串
- // 你可以像使用一個普通URL那樣使用它,比如用在img.src上.
相關(guān)文章
- Microdata作為HTML5新增的一個特性,它允許開發(fā)者在HTML文檔中添加更多的語義信息,以便于搜索引擎和瀏覽器更好地理解頁面內(nèi)容,本文將探討HTML5中Microdata的使用方法以及2025-04-21
- 在HTML語法中,表格主要通過< table >、< tr >和< td >3個標簽構(gòu)成,本文通過實例代碼講解HTML5表格語法格式,感興趣的朋友一起看看吧2025-04-21
- 這篇文章主要介紹了HTML5中使用媒體查詢和Flexbox進行響應(yīng)式布局的方法,簡要介紹了CSS Grid布局的基礎(chǔ)知識和如何實現(xiàn)自動換行的網(wǎng)格布局,感興趣的朋友一起看看吧2025-04-21
基于Canvas的Html5多時區(qū)動態(tài)時鐘實戰(zhàn)代碼
本文介紹了如何使用Canvas在HTML5上實現(xiàn)一個多時區(qū)動態(tài)時鐘的web展示,通過Canvas的API,可以繪制出6個不同城市的時鐘,并且這些時鐘可以動態(tài)轉(zhuǎn)動,每個時鐘上都會標注出對應(yīng)的2025-03-11HTML5 data-*自定義數(shù)據(jù)屬性的示例代碼
HTML5的自定義數(shù)據(jù)屬性(data-*)提供了一種標準化的方法在HTML元素上存儲額外信息,可以通過JavaScript訪問、修改和在CSS中使用,文章還介紹了高級用法,如存儲JSON數(shù)據(jù)、事2025-03-11- 在HTML5中,下拉框(<select>標簽)作為表單的重要組成部分,為用戶提供了一個從預(yù)定義選項中選擇值的方式,本文將深入探討<select>標簽的屬性、樣式,并重點介2025-02-27
- 本文介紹了HTML5InputDatePicker對象表示HTML``元素,是HTML5中的新對象,介紹了日期、周、月份、時間、日期+時間、本地日期時間等不同類型的日期選擇器,感興趣的朋友一起看2025-02-17
- 本文介紹了HTML5中的超鏈接、相對路徑和圖片的使用方法,超鏈接可以創(chuàng)建指向另一個文檔或頁面內(nèi)部書簽的鏈接,相對路徑用于在同一服務(wù)器內(nèi)部跳轉(zhuǎn)頁面,圖片標簽用于引入外部圖2025-02-17
- 本文介紹了HTML5超鏈接的創(chuàng)建方法,包括基本語法、創(chuàng)建圖像超鏈接的邊框去除方法以及錨點鏈接的使用,還討論了超鏈接的四種不同狀態(tài)(link、visited、hover、active)的CSS樣2025-02-17
- 最近看一些技術(shù)網(wǎng)站發(fā)現(xiàn)了details 標簽的妙用,這個不用js即可實現(xiàn)展開/收縮信息,很方便用來讓用戶先才答案,然后下面點擊再給出答案的效果,這里就為大家簡單介紹一下,2024-11-03