postMessage()
通常のファイルを参照できないため、を介して1つまたは複数の関数をWebワーカーに渡したいと思います。
Webワーカーを開始するために、(Blobから作成された)オブジェクトURLを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値が「importScriptssuccess」に設定されています。
私は何か間違ったことをしていますか?関数をWebワーカーに渡すことができる別の方法はありますか?それとも不可能ですか?