Chciałbym przekazać funkcję (lub funkcje) za pośrednictwem postMessage() do pracownika sieci, ponieważ nie mogę odwoływać się do zwykłych plików.Jak przekazywać funkcje do JavaScript Web Worker
Aby odłączyć pracownika WWW, przekazuję URL obiektu (utworzony z obiektu Blob) do konstruktora modułu Worker. Potem przekazuję wiadomość, ale jak na razie nie ma szczęścia, umieszczając jakąś funkcję w wiadomości. Komunikat (JSON) nie może zawierać funkcji bezpośrednio (jak określono here) i chociaż importowanie jest teoretycznie dozwolone, nie korzystałem dotąd z niego w Chrome czy Firefox.
Ciało 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 do "sukcesu importScripts".
Czy robię coś nie tak? Czy istnieje inny sposób przekazywania funkcji pracownikom internetowym? Czy to nie jest możliwe?
Hi można podać swoje funkcje "myLib" Używasz here..Thanks – Buzz