我想通过postMessage()将一个函数(或函数)传递给Web Worker,因为我无法引用常规文件。如何将函数传递给JavaScript Web Worker
为了关闭web worker,我将一个对象URL(从Blob创建)传递给Worker构造函数。然后我传递一条消息,但到目前为止没有运气在消息中添加一个函数。 (JSON)消息不能直接包含函数(按照here的规定),尽管理论上允许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成功”。
我做错了什么?有没有另外一种方法可以将这些功能传递给网络工作者?还是不可能?
嗨,你可以提供你的 “MYLIB” 功能,您使用的here..Thanks – Buzz 2013-10-16 07:18:13