|
|
@ -124,6 +124,42 @@ |
|
|
|
}; |
|
|
|
}; |
|
|
|
})(); |
|
|
|
})(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// No readAsArrayBuffer ?
|
|
|
|
|
|
|
|
(function checkFileReaderReadAsArrayBuffer() { |
|
|
|
|
|
|
|
if (typeof FileReader === 'undefined') |
|
|
|
|
|
|
|
return; // FileReader is not implemented
|
|
|
|
|
|
|
|
var frPrototype = FileReader.prototype; |
|
|
|
|
|
|
|
// Older versions of Firefox might not have readAsArrayBuffer
|
|
|
|
|
|
|
|
if ('readAsArrayBuffer' in frPrototype) |
|
|
|
|
|
|
|
return; // readAsArrayBuffer is implemented
|
|
|
|
|
|
|
|
Object.defineProperty(frPrototype, 'readAsArrayBuffer', { |
|
|
|
|
|
|
|
value: function fileReaderReadAsArrayBuffer(blob) { |
|
|
|
|
|
|
|
var fileReader = new FileReader(); |
|
|
|
|
|
|
|
var originalReader = this; |
|
|
|
|
|
|
|
fileReader.onload = function fileReaderOnload(evt) { |
|
|
|
|
|
|
|
var data = evt.target.result; |
|
|
|
|
|
|
|
var buffer = new ArrayBuffer(data.length); |
|
|
|
|
|
|
|
var uint8Array = new Uint8Array(buffer); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < data.length; i++) |
|
|
|
|
|
|
|
uint8Array[i] = data.charCodeAt(i); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(originalReader, 'result', { |
|
|
|
|
|
|
|
value: buffer, |
|
|
|
|
|
|
|
enumerable: true, |
|
|
|
|
|
|
|
writable: false, |
|
|
|
|
|
|
|
configurable: true |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var event = document.createEvent('HTMLEvents'); |
|
|
|
|
|
|
|
event.initEvent('load', false, false); |
|
|
|
|
|
|
|
originalReader.dispatchEvent(event); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
fileReader.readAsBinaryString(blob); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
})(); |
|
|
|
|
|
|
|
|
|
|
|
// No XMLHttpRequest.response ?
|
|
|
|
// No XMLHttpRequest.response ?
|
|
|
|
(function checkXMLHttpRequestResponseCompatibility() { |
|
|
|
(function checkXMLHttpRequestResponseCompatibility() { |
|
|
|
var xhrPrototype = XMLHttpRequest.prototype; |
|
|
|
var xhrPrototype = XMLHttpRequest.prototype; |
|
|
|