我想通過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