Ich möchte eine Funktion (oder Funktionen) über eine postMessage() an einen Web-Worker übergeben, weil ich nicht auf normale Dateien verweisen kann.So übergeben Sie Funktionen an JavaScript Web Worker
Um den Web-Worker auszuschalten, übergebe ich eine Objekt-URL (erstellt aus einem Blob) an den Worker-Konstruktor. Dann gebe ich eine Nachricht weiter, aber bisher kein Glück, eine Funktion in die Nachricht zu setzen. Die (JSON) -Nachricht darf keine Funktionen direkt enthalten (wie vorgeschrieben here), und obwohl importScripts theoretisch erlaubt ist, hatte ich bisher keinen Erfolg bei der Verwendung 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 führt er den divText Wert auf "importScripts Erfolg".
Mache ich etwas falsch? Gibt es eine andere Möglichkeit, Funktionen an Web-Arbeiter weiterzugeben? Oder ist das nicht möglich?
Hallo Sie Ihre "mylib" Funktionen zur Verfügung stellen können Sie here..Thanks verwenden – Buzz