Я хотел бы передать функцию (или функции) через postMessage() веб-рабочему, потому что я не могу ссылаться на обычные файлы.
Чтобы отключить веб-исполнителя, я передаю URL-адрес объекта (созданный из Blob) в конструктор Worker. Затем я передаю сообщение, но до сих пор не удавалось помещать функцию в сообщение. Сообщение (JSON) не может содержать функции напрямую (как указано здесь), и хотя importScripts теоретически разрешены, я не имел никакого успеха, используя его пока что в Chrome или Firefox.
Тело 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>
В настоящее время это приводит к установке значения divText в значение "importScripts success".
Я что-то делаю неправильно? Есть ли другой способ, которым функции могут передаваться веб-работникам? Или это невозможно?