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?