So übergeben Sie Funktionen an JavaScript Web Worker

Ich möchte eine Funktion (oder Funktionen) über a übergebenpostMessage() an einen Web-Worker, da ich nicht auf reguläre Dateien verweisen kann.

Um den Webworker zu starten, übergebe ich eine Objekt-URL (erstellt aus einem Blob) an dieWorker Konstrukteur. Dann übergebe ich eine Nachricht, aber bisher kein Glück, eine Funktion in die Nachricht zu setzen.

Die (JSON-) Nachricht kann keine Funktionen direkt enthalten (wie festgelegt)Hier), und obwohl importScripts theoretisch erlaubt ist, hatte ich bisher keinen Erfolg damit in Chrome oder Firefox.

Der Körper der HTML-Datei:

<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>

Derzeit wird der divText-Wert auf "importScripts success" gesetzt.

Mache ich etwas falsch? Gibt es eine andere Möglichkeit, Funktionen an Web Worker zu übergeben? Oder geht das nicht?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage