深入解析HTML5中的Blob對(duì)象的使用
HTML5中的Blob對(duì)象和MYSQL中的BLOB類型在概念上是有點(diǎn)區(qū)別的。MYSQL中的BLOB類型就只是個(gè)二進(jìn)制數(shù)據(jù)容器。而HTML5中的Blob對(duì)象除了存放二進(jìn)制數(shù)據(jù)外還可以設(shè)置這個(gè)數(shù)據(jù)的MINE類型,這相當(dāng)于對(duì)文件的儲(chǔ)存,其它很多二進(jìn)制對(duì)象也是從這個(gè)對(duì)象繼承的。
在稍低版本的現(xiàn)代瀏覽器中,這個(gè)Blob對(duì)象還沒(méi)規(guī)范化,因此需要BlobBuilder之類的方式來(lái)創(chuàng)建。但是現(xiàn)在Blob已經(jīng)規(guī)范到可以直接new它的構(gòu)造器Blob來(lái)創(chuàng)建了,而且瀏覽器幾乎都已經(jīng)支持了這個(gè)方式,所以對(duì)于舊標(biāo)準(zhǔn)咱就沒(méi)必要糾結(jié)了。
- var data='<b style="font-size:32px;color:red;">次碳酸鈷</b>';
- var blob=new Blob([data],{"type":"text/html"});
- console.log(blob);

這樣我們就創(chuàng)建了一個(gè)Blob對(duì)象,注意Blob這個(gè)構(gòu)造器的參數(shù)比較詭異,第一個(gè)參數(shù)是一組數(shù)據(jù),所以必須是數(shù)組,即使像上面的例子一樣只有一個(gè)字符串也必須用數(shù)組裝起來(lái)。第二個(gè)參數(shù)是對(duì)這一Blob對(duì)象的配置屬性,目前也只有一個(gè)type也就是相關(guān)的MIME需要設(shè)置,使用key-value的方式也許是為了今后的擴(kuò)展。
那么,把數(shù)據(jù)做成Blob有什么用呢?對(duì)于Blob對(duì)象,我們可以創(chuàng)建出一個(gè)URL來(lái)訪問(wèn)它。使用URL對(duì)象的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,任何瀏覽器支持的類型都可以這么用。而且這個(gè)Blob-URL的生存周期是從創(chuàng)建到文檔釋放,不會(huì)造成資源的浪費(fèi)。
Blob是一個(gè)HTML5中很基本的二進(jìn)制數(shù)據(jù)對(duì)象,很多方法的操作參數(shù)都支持使用Blob,這個(gè)我一下也列舉不出??傊?,幾乎所有參數(shù)類型是二進(jìn)制數(shù)據(jù)的方法都支持使用Blob作為參數(shù)就對(duì)了。所以把數(shù)據(jù)做成Blob可以讓之后的一些列操作變得更方便。
方法
slice()
返回一個(gè)新的Blob對(duì)象,包含了源Blob對(duì)象中指定范圍內(nèi)的數(shù)據(jù).
- Blob slice(
- optional long long start,
- optional long long end,
- optional DOMString contentType
- };
參數(shù)
start 可選
開(kāi)始索引,可以為負(fù)數(shù),語(yǔ)法類似于數(shù)組的slice方法.默認(rèn)值為0.
end 可選
結(jié)束索引,可以為負(fù)數(shù),語(yǔ)法類似于數(shù)組的slice方法.默認(rèn)值為最后一個(gè)索引.
contentType 可選
新的Blob對(duì)象的MIME類型,這個(gè)值將會(huì)成為新的Blob對(duì)象的type屬性的值,默認(rèn)為一個(gè)空字符串.
返回值
一個(gè)新的Blob對(duì)象,包含了源Blob對(duì)象中指定范圍內(nèi)的數(shù)據(jù).
注意
如果start參數(shù)的值比源Blob對(duì)象的size屬性的值還大,則返回的Blob對(duì)象的size值為0,也就是不包含任何數(shù)據(jù).
BlobPropertyBag
一個(gè)包含有兩個(gè)屬性type和endings的對(duì)象.
type
設(shè)置該Blob對(duì)象的type屬性.
endings(已廢棄)
對(duì)應(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
等價(jià)于:
- 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對(duì)象的方式,但該方式現(xiàn)在已經(jīng)廢棄,所以不應(yīng)該再使用了.
例子:使用類型數(shù)組和Blob對(duì)象創(chuàng)建一個(gè)對(duì)象URL
- var typedArray = GetTheTypedArraySomehow();
- var blob = new Blob([typedArray], {type: "application/octet-binary"}); // 傳入一個(gè)合適的MIME類型
- var url = URL.createObjectURL(blob);
- // 會(huì)產(chǎn)生一個(gè)類似blob:d3958f5c-0777-0845-9dcf-2cb28783acaf這樣的URL字符串
- // 你可以像使用一個(gè)普通URL那樣使用它,比如用在img.src上.
相關(guān)文章

HTML5實(shí)現(xiàn)的移動(dòng)端購(gòu)物車自動(dòng)結(jié)算功能示例代碼
本文介紹HTML5實(shí)現(xiàn)移動(dòng)端購(gòu)物車自動(dòng)結(jié)算,通過(guò)WebStorage、事件監(jiān)聽(tīng)、DOM操作等技術(shù),確保實(shí)時(shí)更新與數(shù)據(jù)同步,優(yōu)化性能及無(wú)障礙性,提升用戶體驗(yàn),感興趣的朋友一起看看吧2025-06-18- 在HTML5中,<button>標(biāo)簽用于定義一個(gè)可點(diǎn)擊的按鈕,它是創(chuàng)建交互式網(wǎng)頁(yè)的重要元素之一,本文將深入解析HTML5中的<button>標(biāo)簽,詳細(xì)介紹其屬性、樣式以及實(shí)際2025-06-18
基于 HTML5 Canvas 實(shí)現(xiàn)圖片旋轉(zhuǎn)與下載功能(完整代碼展示)
本文將深入剖析一段基于 HTML5 Canvas 的代碼,該代碼實(shí)現(xiàn)了圖片的旋轉(zhuǎn)(90 度和 180 度)以及旋轉(zhuǎn)后圖片的下載功能,通過(guò)對(duì)代碼的解讀,我們可以學(xué)習(xí)到如何利用 Canvas API2025-06-18
HTML5 getUserMedia API網(wǎng)頁(yè)錄音實(shí)現(xiàn)指南示例小結(jié)
本教程將指導(dǎo)你如何利用這一API,結(jié)合Web Audio API,實(shí)現(xiàn)網(wǎng)頁(yè)錄音功能,從獲取音頻流到處理和保存錄音,整個(gè)過(guò)程將逐步詳解,此外,還討論了getUserMedia API的使用限制和最2025-06-16- HTML5的搜索框是一個(gè)強(qiáng)大的工具,能夠有效提升用戶體驗(yàn),通過(guò)結(jié)合自動(dòng)補(bǔ)全功能和適當(dāng)?shù)臉邮?,可以?chuàng)建出既美觀又實(shí)用的搜索界面,這篇文章給大家介紹HTML5 搜索框Search Box2025-06-13
- Checkbox是HTML5中非常重要的表單元素之一,通過(guò)合理使用其屬性和樣式自定義方法,可以為用戶提供豐富多樣的交互體驗(yàn),這篇文章給大家介紹HTML5中Checkbox標(biāo)簽的深入全面解2025-06-13
HTML5無(wú)插件拖拽圖片上傳功能實(shí)現(xiàn)過(guò)程
本實(shí)例展示了一種基于HTML5技術(shù)的圖片上傳功能,無(wú)需外部插件即可通過(guò)拖放圖片實(shí)現(xiàn)上傳,涉及到HTML5的拖放API和File API,以及使用CSS來(lái)增強(qiáng)用戶界面的交互性和視覺(jué)反饋,2025-05-16HTML5 定位大全之相對(duì)定位、絕對(duì)定位和固定定位
在HTML5和CSS中,定位(positioning)是控制元素在頁(yè)面上位置的重要機(jī)制,主要有四種定位方式:靜態(tài)定位(static)、相對(duì)定位(relative)、絕對(duì)定位(absolute)和固定定位(fixed),2025-05-13- Microdata作為HTML5新增的一個(gè)特性,它允許開(kāi)發(fā)者在HTML文檔中添加更多的語(yǔ)義信息,以便于搜索引擎和瀏覽器更好地理解頁(yè)面內(nèi)容,本文將探討HTML5中Microdata的使用方法以及2025-04-21
在HTML語(yǔ)法中,表格主要通過(guò)< table >、< tr >和< td >3個(gè)標(biāo)簽構(gòu)成,本文通過(guò)實(shí)例代碼講解HTML5表格語(yǔ)法格式,感興趣的朋友一起看看吧2025-04-21




