<Permission denied> 尝试实例化网络工作者对象时出错

<Permission denied> error trying to instantiate web worker object

第一次尝试 web worker API,似乎无法从后台 worker 那里得到响应。

标记:

<script src="~/Scripts/script.js"></script>
<button onclick="TriggerWorker()">Trigger Worker</button>

script.js 文件的内容:

function TriggerWorker() {

    var myWorker = new Worker('worker.js');

    myWorker.onmessage = function (e) {
        console.log(e.data);
    }

    console.log(myWorker);

    myWorker.postMessage("Text sent to worker");
}

worker.js 文件的内容:

onmessage = function (e) {
    postMessage('OK');
}

我可以让 myWorker 对象写入控制台,但响应 "OK" 永远不会返回控制台。检查 myWorker 对象时,我可以看到 onmessage 属性 设置为 "Permission denied".

包含 worker onmessage 声明的文件的路径是相对于 html 文件的 - 而不是调用脚本文件。

我通过进行以下编辑使其正常工作:

var myWorker = new Worker('../Scripts/worker.js');
  1. onmessage 事件与当前 window 有关。所以在script.js中应该是

    self.onmessage = 函数 (e)

而不是

myWorker.onmessage = function (e)
  1. postMessage 方法属于目标 window。所以在worker.js中应该是

    onmessage = 函数 (e) { e.source.postMessage('OK'); }

而不是

onmessage = function (e) {
   postMessage('OK'); }