Как передать функции в JavaScript Web Worker
Я хотел бы передать функцию (или функции) через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».
Я делаю что-то неправильно? Есть ли другой способ передачи функций веб-работникам? Или это невозможно?