Объекты в web worker передаются через сериализацию "structured clone algorithm" и есть
ограничения. Нельзя передать функцию и, соотв., логику.
С другой стороны, можно создавать worker динамически, из data-url, как это описано
тут:
<script type="text/js-worker">
var myVar = 'Hello World!';
// остальной код web-worker'а
</script>
<!-- ... -->
<script type="text/javascript">
var blob = new Blob(Array.prototype.map.call(document.querySelectorAll('script[type=\'text\/js-worker\']'), function (oScript) { return oScript.textContent; }),{type: 'text/javascript'});
// Creating a new document.worker property containing all our "text/js-worker" scripts.
document.worker = new Worker(window.URL.createObjectURL(blob));
Полный код примера см. по ссылке выше.
Т.е. можно хоть в JS на странице сгенерировать код для worker'а и запустить рабочего.