Javascript SharedWorker无法与主程序正常通信

时间:2017-08-11 17:17:13

标签: javascript html shared-worker

我曾与Worker objects before合作,而且非常简单,特别是在教程中。

自然,下一步将是work with SharedWorkers。我已经把它搞定了,但现在似乎SharedWorker没有正确响应。我将一个postMessage发送到SharedWorker,在我的代码中,我让SharedWorker发回了相同的文本,有点像回声效果。

不幸的是,SharedWorker只返回从主程序发送的消息的第一个字母,并且不会在控制台中记录“Background”字符串以告诉我SharedWorker正在运行。 “安装完成”日志消息也证明已创建SharedWorker。

...代码

主HTML文件......

<html>
<head>
<title>Test</title>
</head>
<body>
<script>
var w = new SharedWorker('sharedworker.js');
w.port.start();
w.port.postMessage("start");
w.port.onmessage = function(e){
  console.log(e.data);
}; 
console.log("Setup complete.");
</script>
</body>
</html>

SharedWorker脚本......

onconnect = function(e){
  var port = e.ports[0];
  port.addEventListener('message', function(e){
    port.postMessage(e.data[0]);
  });
  port.start();
  console.log("Background.");
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

  

不幸的是,SharedWorker只返回从主程序发送的消息的第一个字母

[0]放在对正在读取的字符串的引用上。目前,它将字符串作为数组连接,只返回第一个字符。

port.postMessage(e.data); // versus  port.postMessage(e.data[0]);
  

并且没有向“控制台”记录“后台”字符串,以便让我知道SharedWorker正在运行

我不是专家,但我会猜测。 (我在文档中看不到任何显而易见的内容,我之前没有使用过SharedWorkers。)从多处理的角度来看,这是我期望SharedWorkers做的事情 - SharedWorker的上下文是完全独立的,console在其范围内不存在。

在另一个关于调试的SO线程上有一些可能有用的答案可能有助于您进行调试:How to debug web workers