FileReaderSync testing

HTML

<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(); 
            postMessage({ 
                result: reader.readAsDataURL(data)
            });
       } 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) {
     alert(files);
       
        var now = Date.now();
        processFiles(files, function(src) {
            var a = document.createElement("a");
            a.textContent = "Received data URL in " + (Date.now() - now) +...