我想通过 a 将一个(或多个函数)传递postMessage()
给网络工作者,因为我无法引用常规文件。
为了启动 Web Worker,我将一个对象 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 成功”。
难道我做错了什么?还有另一种方法可以将函数传递给网络工作者吗?还是不可能?