Blob constructor browser compatibility Blob constructor browser compatibility arrays arrays

Blob constructor browser compatibility


So, these are actually two different problems. The Desktop Chrome warning was a bug in chrome which is fixed since 2013-03-21.

Mobile Chrome is giving you a TypeError because the blob constructor is not supported. Instead you must use the old BlobBuilder API. The BlobBuilder API has browser specific BlobBuilder constructors. This is the case for FF6 - 12, Chrome 8-19, Mobile Chrome, IE10 and Android 3.0-4.2.

var array = new Int8Array([17, -45.3]);try{  var jpeg = new Blob( [array], {type : "image/jpeg"});}catch(e){    // TypeError old chrome and FF    window.BlobBuilder = window.BlobBuilder ||                          window.WebKitBlobBuilder ||                          window.MozBlobBuilder ||                          window.MSBlobBuilder;    if(e.name == 'TypeError' && window.BlobBuilder){        var bb = new BlobBuilder();        bb.append(array.buffer);        var jpeg = bb.getBlob("image/jpeg");    }    else if(e.name == "InvalidStateError"){        // InvalidStateError (tested on FF13 WinXP)        var jpeg = new Blob( [array.buffer], {type : "image/jpeg"});    }    else{        // We're screwed, blob constructor unsupported entirely       }}

Fiddle: http://jsfiddle.net/Jz8U3/13/


Got it working with your code. I only had to change some little detail:

if(e.name == 'TypeError' && window.BlobBuilder){        var bb = new BlobBuilder();        bb.append(data);        out = bb.getBlob(datatype);        console.debug("case 2");    }

bb.append(data); // data must be with no brackets

My function(constructor) that works now for all browsers:

var NewBlob = function(data, datatype){    var out;    try {        out = new Blob([data], {type: datatype});        console.debug("case 1");    }    catch (e) {        window.BlobBuilder = window.BlobBuilder ||                window.WebKitBlobBuilder ||                window.MozBlobBuilder ||                window.MSBlobBuilder;        if (e.name == 'TypeError' && window.BlobBuilder) {            var bb = new BlobBuilder();            bb.append(data);            out = bb.getBlob(datatype);            console.debug("case 2");        }        else if (e.name == "InvalidStateError") {            // InvalidStateError (tested on FF13 WinXP)            out = new Blob([data], {type: datatype});            console.debug("case 3");        }        else {            // We're screwed, blob constructor unsupported entirely               console.debug("Errore");        }    }    return out;}