var messageHandler = function(port, e) { var text_decoder = new TextDecoder; port.postMessage({ content: text_decoder.decode(e.data), byteLength: e.data.byteLength }); // Send back the array buffer via Client.postMessage. port.postMessage(e.data, {transfer: [e.data.buffer]}); port.postMessage({ content: text_decoder.decode(e.data), byteLength: e.data.byteLength }); }; self.addEventListener('message', e => { if (e.ports[0]) { // Wait for messages sent via MessagePort. e.ports[0].onmessage = messageHandler.bind(null, e.ports[0]); return; } messageHandler(e.source, e); });