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

问题描述:

如果我试图通过一个JavaScript文件中使用网络工作者,铬抛出一个错误 -为什么Chrome不允许Web Workers在JavaScript中运行?

Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.

但它可以让他们,如果我们直接通过HTML中使用。

Chrome can't load web worker的答案表示Chrome在从本地文件运行脚本时不允许加载web worker。

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

Web Workers在Firefox,Safari和Edge中工作得很好

+1

网络工作者自4.00版本以来一直支持chrome,也许分享你的代码?我怀疑它可以访问'worker.js'这就是问题所在。 – Jim

+0

您的应用程序是否从文件系统(file://)运行http(http://,https://)或streight? –

+1

此问题与[Chrome无法加载网络工作者](http://stackoverflow.com/q/21408510/607407)完全相同。在提出问题之前,请确实考虑使用Google搜索错误消息,这会更快。 –

此问题已被提问。工作人员应该工作在从磁盘打开的HTML文件中,只要您使用相对路径即可。但是,如果chrome正确地实现了这一点,就一直存在争议。

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

new Worker("./scripts/worker.js"); 

如果还是不行,请参见以下解决方法:https://stackoverflow.com/a/33432215/607407

具体来说,负载工人作为一个功能,然后将其转换函数字符串:

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

您提到的答案是“Chrome从本地文件运行脚本时不允许您加载web worker”。 这是我真正的问题。为什么我们不能在Chrome本地使用工作人员? –

+0

如果worker js文件在同一个目录中,我只需要将它称为正确的? '新工人(“worker.js”);' – utdev

+0

@InderpartapCheema如果您问*为什么*,那么它的主题,请参阅帮助中心。 –