No construyas BLOB, sí los construyas

Este es un aviso para todos ustedes, fans de BlobBuilder. ¡Adiós!

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

A modo de comparación, a continuación, se muestra el mismo código que usa 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);

Es práctico. Entonces, en lugar de anexar a un BlobBuilder, solo 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 los documentos de MDN en Blob.