Não crie blobs, construa-os

Este é um aviso a todos os fãs do BlobBuilder. Até logo!

A BlobBuilder é uma API útil para criar Blobs (ou arquivos) em JavaScript. Ele existe desde o Chrome 8, FF 6 e IE 10, mas nunca foi enviado no Safari e provavelmente nunca será. Mudanças recentes na especificação da API File incluem um novo construtor para Blob, o que basicamente torna BlobBuilder irrelevante. Na verdade, ele já foi desativado pelo Safari Night, e o Chrome começará a enviar um aviso no console em breve.

Para fins de comparação, confira abaixo o mesmo código usando o BlobBuilder descontinuado e o novo construtor Blob. O snippet cria uma folha de estilo e a anexa ao 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);

Útil! Agora, em vez de anexar a BlobBuilder, podemos simplesmente criar o Blob com uma matriz de partes de dados. As partes dos dados podem ser de tipos diferentes (DOMString, ArrayBuffer, Blob) e em qualquer ordem. Exemplo:

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

O segundo parâmetro de objeto é opcional. Para mais informações sobre essas mudanças, consulte os documentos da MDN no Blob.