Load Web Workers Without JavaScript File
HTML
<div id='log'></div>
<script type='text/worker' id='worker-script'>
self.addEventListener('message', function(e) {
//console.log(e.data);
postMessage(e.data / 2);
},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;
}
// Load a worker from a string, and manually initialize the worker
var inlineWorkerText =
"self.addEventListener('message', function(e) { postMessage(e.data * 2); } ,false);"
;
var inlineWorker = makeWorker(inlineWorkerText);
inlineWorker.onmessage = function(e) {
document.getElementById('log').innerHTML += '<br />Inline: ' + e.data;
};
// Load a worker from a script of type=text/worker, and use the getWorker helper
var scriptTagWorker = makeWorker(
document.getElementById('worker-script').textContent
);
scriptTagWorker.onmessage = function(e) {
document.getElementById('log').innerHTML += '<br />Script Tag: ' + e.data;
};
inlineWorker.postMessage(1);
inlineWorker.postMessage(2);
inlineWorker.postMessage(100);
scriptTagWorker.postMessage(1);
scriptTagWorker.postMessage(2);
scriptTagWorker.postMessage(100);