No construyas BLOB, sí los construyas

Este es un aviso para todos los fans de BlobBuilder: ¡Nos despedimos!

BlobBuilder es una API útil para crear BLOB (o archivos) en JavaScript. Existe desde Chrome 8, FF 6 e IE 10, pero nunca se ha enviado en Safari y es probable que nunca lo haga. Los cambios de especificaciones recientes en la API de File incluyen un nuevo constructor para Blob, lo que básicamente hace que BlobBuilder sea irrelevante. De hecho, las noches de Safari ya lo inhabilitaron y Chrome comenzará a advertirte en la consola muy pronto.

A modo de comparación, a continuación se muestra el mismo código con el BlobBuilder obsoleto y el nuevo constructor Blob. El fragmento crea una hoja de estilo y la agrega al 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);

Práctico. Entonces, ahora, en lugar de agregar un elemento BlobBuilder, podemos crear el Blob a partir de un array de partes de datos. Las partes de los datos pueden ser de diferentes tipos (DOMString, ArrayBuffer, Blob) y en cualquier orden. Por ejemplo:

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

Además, ten en cuenta que el segundo parámetro de objeto es opcional. Para obtener más información sobre estos cambios, consulta la documentación de MDN sobre Blob.