FileReaderSync testing
by msfrisbie
HTML
<div id='log'>Choose some files from the input.</div>
<em style="position:absolute; top:0;right:10px;"><a href='http://jsfiddle.net/bgrins/7DjCP'>edit this code</a></em>
<hr />
<input type='file' id='files' multiple onchange='handleFileSelect()' />
<hr />
<script type='text/worker' id='worker-script'>
self.addEventListener('message', function(e) {
var data=e.data;
try {
var reader = new FileReaderSync();
console.log(reader);
const result = reader.readAsDataURL(data)
console.log(result);
postMessage({
result
});
} catch(e){
postMessage({
result:'error'
});
}
}, false);
</script>
JavaScript
// makeWorker is a little wrapper for generating web workers from strings
function makeWorker(script) {
var URL = window.URL || window.webkitURL;
var Blob = window.Blob;
var Worker = window.Worker;
if (!URL || !Blob || !Worker || !script) {
return null;
}
var blob = new Blob([script]);
var worker = new Worker(URL.createObjectURL(blob));
return worker;
}
var FileReaderSyncSupport = false;
var syncDetectionScript = "onmessage = function(e) { postMessage(!!FileReaderSync); };";
checkFileReaderSyncSupport();
// checkFileReaderSyncSupport: Create a temporary worker and see if FileReaderSync exists
function checkFileReaderSyncSupport() {
var worker = makeWorker(syncDetectionScript);
if (worker) {
worker.onmessage =function(e) {
FileReaderSyncSupport = e.data;
if (FileReaderSyncSupport) {
document.querySelector("#log").textContent += " Nice work, your browser supports this demo.";
}
};
worker.postMessage({});
}
}
// processFiles: Create a worker that reads the files as a Data URL.
function processFiles(files, cb) {
if (!FileReaderSyncSupport) {
return;
}
var syncWorker = makeWorker(
document.getElementById('worker-script').textContent
);
if (syncWorker) {
syncWorker.onmessage = function(e) {
cb(e.data.result);
};
Array.prototype.forEach.call(files, function(file) {
syncWorker.postMessage(file);
});
}
}
function handleFileSelect() {
var files = document.getElementById('files').files;
var log = document.getElementById('log');
if (FileReaderSyncSupport) {
var now = Date.now();
processFiles(files, function(src) {
var a = document.createElement("a");
a.textContent = "Received data URL in " + (Date.now() - now) + "ms";
a.href =...