我想通过一个(或多个)函数传递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 success”。
难道我做错了什么?是否有另一种方式可以将函数传递给网络工作者?还是不可能?
事实证明这个方法工作正常,只是我的工作人员有一个错误:
var result = greeter("john");
应该
var result = greet("john");
这是有道理的 - 我将greeter变量传递给worker,但它没有理由知道我传递的对象的变量名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)