My very first web worker

Serializing the shit out of everything!

by borkdude

HTML

<p><button>Post message</button></p>
<input type="text" value="(+ 1 2 3)"/>

<script type="text/ww">
    (async function() {
    await import('https://cdn.jsdelivr.net/npm/scittle@0.6.17/dist/scittle.js');
    self.onmessage = function(e) {
        var res = scittle.core.eval_string(e.data.code);
        self.postMessage({val: res});
    };
    })();
</script>

JavaScript

try {
    
    var ww = document.querySelector('script[type="text/ww"]'),
        code = ww.textContent,
        blob = new Blob([code], {type: 'text/javascript'}),
        blobUrl = URL.createObjectURL(blob),
        worker = new Worker(blobUrl);
    
    var _start,
        btn = document.querySelector('button');
    
    worker.onmessage = function(e) {        
        var log = document.createElement('p');
        log.innerHTML = 'Response: <pre>' + e.data.val + '</pre>';
        document.body.appendChild(log);
    };
    
    function processInput(e) {
        var o = document.querySelector("input").value;
        worker.postMessage({code: o});
    };
    
    btn.onclick = processInput;
    
    document.addEventListener("DOMContentLoaded", processInput, false);

    
}
catch (ex) {
    alert(ex);
}