为什么Chrome不允许Web Worker在JavaScript中运行?

Ind*_*ema 2 html javascript google-chrome web-worker

如果我尝试通过JavaScript文件使用网络工作者,Chrome会抛出错误 -

Uncaught SecurityError:无法创建worker:'(path)/worker.js'中的脚本无法从origin'null'访问.

但是如果我们直接使用HTML,它就允许它们.

Chrome上的答案无法加载网络工作者说Chrome在从本地文件运行脚本时不允许您加载Web工作者.

为什么chrome不允许Web worker在本地运行?

Web Workers在Firefox,Safari和Edge中完全正常工作

Tom*_*ica 6

这个问题已经被问到了.只要您使用相对路径,工作人员就应该使用从磁盘打开的HTML文件.但是,如果chrome实现这一点,则一直存在争议.

我建议您尝试在脚本中使用相对路径:

new Worker("./scripts/worker.js");
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请参阅此解决方法:https://stackoverflow.com/a/33432215/607407

具体来说,将worker作为函数加载,然后将函数转换为string:

function worker_function() {
    // all worker code here
}
var worker = new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'})));
Run Code Online (Sandbox Code Playgroud)

  • 您提到的答案是“Chrome 不允许您在从本地文件运行脚本时加载网络工作人员”。这是我真正的问题。为什么我们不能在 Chrome 中本地使用工人? (4认同)
  • 这是关于主题的,我也对此很好奇 + 问题越多越好 - 我在 2018 年使用谷歌搜索这个问题,并且对完全没有相同的此类问题感到沮丧,因为现在我预计此类问题会有数十个答案的事情,每个人都在这个主题上闪耀着自己的智慧。 (2认同)
  • @VasilyHall 我理解你的好奇心和沮丧。但询问“为什么”Google Chrome 团队对某个功能做出决定并不是 stackoverflow 上的主题:这纯粹是猜测 - 除非决策者之一真正参与其中。 (2认同)