Jak przekazać funkcje do JavaScript Web Worker

Chciałbym przekazać funkcję (lub funkcje) za pośrednictwem apostMessage() do pracownika sieci, ponieważ nie mogę odwoływać się do zwykłych plików.

Aby wyłączyć robotę sieciową, przekazuję adres URL obiektu (utworzony z Bloba) doWorker konstruktor. Następnie przekazuję wiadomość, ale jak dotąd nie ma szczęścia umieszczenie funkcji w wiadomości.

Komunikat (JSON) nie może bezpośrednio zawierać funkcji (jak określono)tutaj), i chociaż importScripts jest teoretycznie dozwolony, nie udało mi się go wykorzystać do tej pory w Chrome lub Firefox.

Treść pliku html:

<div id="divText">1234</div>
<script>
    var greeter = function greet(name) {
        return "hello " + name;
    };
    function webWorkerWorker() {
        self.postMessage("started1");
        self.onmessage = function(event) {
            importScripts(event.data.content);
            self.postMessage("importScripts success");
            var result = greeter("john");
            self.postMessage(result);
        };
    }
    var functionBody = mylib.extractFunctionBody(webWorkerWorker);
    var functionBlob = mylib.createBlob([functionBody]);
    var functionUrl = mylib.createObjectURL(functionBlob);

    var functionBody2 = mylib.extractFunctionBody(greeter);
    var functionBlob2 = mylib.createBlob([greeter]);
    var functionUrl2 = mylib.createObjectURL(functionBlob2);

    var worker = new Worker(functionUrl);
    worker.onmessage = function(event) {
        document.getElementById("divText").innerHTML = event.data;
    }
    worker.postMessage({
                type: "init",
                content: functionUrl2
            });
</script>

Obecnie powoduje ustawienie wartości divText na „sukces importScripts”.

czy robię coś źle? Czy istnieje inny sposób przekazywania funkcji pracownikom sieci? Czy to nie jest możliwe?

questionAnswers(3)

yourAnswerToTheQuestion