Javascript 在Chrome中使用Worker内部的“console.log”将同一消息打印两次

Javascript 在Chrome中使用Worker内部的“console.log”将同一消息打印两次,javascript,google-chrome,webkit,web-worker,console.log,Javascript,Google Chrome,Webkit,Web Worker,Console.log,和标题差不多。更奇怪的是,只有在新选项卡中运行程序时才会发生这种情况,如果只刷新页面,每个console.log,只有一条消息 这里是main.js: const worker = new Worker('worker.js'); 下面是worker.js: console.log('Foo bar!'); 下面是index.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" />

和标题差不多。更奇怪的是,只有在新选项卡中运行程序时才会发生这种情况,如果只刷新页面,每个
console.log
,只有一条消息

这里是
main.js

const worker = new Worker('worker.js');
下面是
worker.js

console.log('Foo bar!');
下面是
index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Web Workers</title>

<style></style>
</head>
<body>

<script src="main.js"></script>
</body>
</html>

网络工作者
在Firefox中,情况并非如此。我使用的是Chrome版本65,更奇怪的是,重复的消息似乎不属于“上下文”下拉列表中列出的上下文,因此当我尝试过滤掉所有控制台消息时,除了由
worker.js
发送的消息外,列出的唯一消息是第一条消息,第二条消息(重复)似乎不属于任何上下文


@bean的回答表明,已经有这样一个问题(我相信是从2018年2月开始)没有得到回答。如果没有人回答这个问题,我会考虑在Chrome的开发论坛中提出一个问题。< /P> < P>这似乎是Chrome的一个奇怪行为,有人在这里发布了同样的问题。


但是,将
console.log
直接放在
worker.js
中不是一个好做法。web工作者在单独的线程中运行,并侦听从
main.js
发布的消息,并采取相应的操作,因此任何业务逻辑都应该放在
onmessage
事件处理程序中。通过这样做,您不必担心代码被执行两次。

@TarunLalwani localhost,我相信在本地加载文件在Chrome中不起作用(对于工作人员)。@TarunLalwani local Workers在Chrome中不起作用,这就是我从
localhost
访问文件的原因。如果我没有将此与
serviceworks
混为一谈,那么Workers只在HTTPS和
localhost
中工作。是的,这就是我观察到的,刷新页面正常工作。无论如何,如果没有
console.log
,您应该如何调试?您可以在worker javascript文件中设置断点,并在开发人员工具中调试。这里的细节:我不认为放置
console.log
会改变一些事情。看起来整个worker代码执行了两次。