Me gustaría pasar una función (o funciones) a través de un postMessage() a un trabajador web, porque no puedo hacer referencia a archivos regulares.Cómo pasar funciones a JavaScript Web Worker
Para expulsar al trabajador web, paso una URL de objeto (creada a partir de una Blob) al constructor Trabajador. Luego estoy pasando un mensaje, pero hasta ahora no tuve suerte poniendo una función en el mensaje. El mensaje (JSON) no puede contener funciones directamente (como se estipuló en here), y aunque importScripts está teóricamente permitido, hasta ahora no he tenido éxito en utilizarlo en Chrome o Firefox.
El cuerpo del archivo 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>
Actualmente se lleva a configurar el valor divText de "éxito importScripts".
¿Estoy haciendo algo mal? ¿Hay alguna otra forma en que las funciones se puedan pasar a los trabajadores de la web? ¿O acaso no es posible?
Hola puede ofrecerle sus funciones "MYLIB" está utilizando here..Thanks – Buzz