z odpowiedzi Davida Jonesa, napisałem tę metodę. Try/catch obsługuje wyjątek readAsBinaryString w IE10/11 i nazywają się "tryb IE":
function readBinaryStringFromBlob(blob, callback, ie) {
var reader = new FileReader();
if(!ie) {
reader.addEventListener("loadend", function() {
callback(reader.result);
});
try {
reader.readAsBinaryString(blob);
} catch (err) {
readBinaryStringFromBlob(blob, callback, true);
}
} else {
reader.addEventListener("loadend", function() {
var binary = "";
var bytes = new Uint8Array(reader.result);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
callback(binary);
});
reader.readAsArrayBuffer(blob);
}
}
Dziękuję, Davidzie. Próbowałem wpisanie tego w kodzie i otrzymałem komunikat o błędzie, "ReferenceError: UInt8Array nie jest zdefiniowany". Po chwili uświadomiłem sobie, że typ jest intuicyjnie nazywany 'Uint8Array' zamiast' UInt8Array' - zwróć uwagę na małe litery "i". Zły programista! Taki smutny! – Suncat2000