Не создавайте BLOB-объекты, создавайте их

Предупреждаем всех поклонников BlobBuilder : пока, пока!

BlobBuilder — это удобный API для создания больших двоичных объектов (или файлов) в JavaScript. Он существует со времен Chrome 8, FF 6 и IE 10, но никогда не поставлялся в Safari и, вероятно, никогда не будет. Недавние изменения спецификации File API включают новый конструктор для Blob , что по сути делает BlobBuilder неактуальным. Фактически, ночные программы Safari уже отключили его, и Chrome очень скоро начнет предупреждать вас в консоли.

Для сравнения ниже приведен тот же код с использованием устаревшего BlobBuilder и нового конструктора Blob . Фрагмент создает таблицу стилей и добавляет ее в DOM.

BlobBuilder() :

window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
                        window.MozBlobBuilder || window.MSBlobBuilder;
window.URL = window.URL || window.webkitURL;

var bb = new BlobBuilder();
bb.append('body { color: red; }');
var blob = bb.getBlob('text/css');

var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = window.URL.createObjectURL(blob);

document.body.appendChild(link);

Blob() :

window.URL = window.URL || window.webkitURL;

var blob = new Blob(['body { color: red; }'], {type: 'text/css'});

var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = window.URL.createObjectURL(blob);
document.body.appendChild(link);

Удобный! Итак, теперь вместо добавления к BlobBuilder мы можем просто создать Blob из массива частей данных. Части данных могут быть разных типов ( DOMString , ArrayBuffer , Blob ) и располагаться в любом порядке. Например:

var blob = new Blob(['1234567890', blob, arrayBuffer]);

Также обратите внимание, что второй параметр объекта является необязательным. Дополнительную информацию об этих изменениях см. в документации MDN по Blob .