Chrome无法加载networking工作者

我正在开发一个使用web worker的项目。

在我的头部我有这样的代码:

var worker = new Worker("worker.js"); // More code 

这在Safari中正常工作,但Chrome报告了以下错误:

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

为什么在Safari浏览器中完美地工作,而不是Chrome呢? 我该如何解决?

谢谢。

由于很好的原因,当从本地文件运行脚本时,Chrome不允许您加载Web工作者。 注意:Firefox也不能工作。 尝试Safari。 🙂

这个问题已经被贵族鸡解释清楚了,但是我有一个更为一般的解决办法。 而不是安装wamp或xamp,使用python,你可以导航到你的项目所在的文件夹并input: python -m http.server

就这样,你将在该文件夹上有一个正在运行的服务器,可从本地主机访问。

我使用了一种解决方法。 铬只是有点迟钝,所以它阻止Worker而不是<script> 。 因此,制定通用解决scheme的最佳方式是:

 function worker_function() { // all code here } // This is in case of normal worker start // "window" is not defined in web worker // so if you load this file directly using `new Worker` // the worker code will still execute properly if(window!=self) worker_function(); 

然后将其作为普通的<script src="..." 。 一旦这个函数被定义,你就可以使用这个代码的憎恶:

 new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'}))); 

您也可以在启动Chrome时使用–allow-file-access-from-files标志。

MacOsX示例:

 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files 

更多信息: chrome的Web工作者设置

我的问题和你的post一样。 解决的办法是你必须用localhost(wamp或xamp)来运行它。 它会完成。

你需要一个Web服务器的HTTP协议请求而不是本地文件,并正常工作:)

随着Python 2.x比Python 3.x更广泛的部署,类似python -m SimpleHTTPServer 8000更普遍适用,而不仅仅是Mac OS X.我发现在Cygwin下使用它是必要的。

有了这个, 这个例子就像一个冠军。

Chrome加载文件,但无法运行。 使用Firefox 。 它为我工作。

一个可能的原因是chrome不能让你从本地文件运行脚本时加载web worker。 我尝试在我的Firefox上运行代码,也不能。

这是因为安全的限制。 您需要使用http://https://协议而不是file:///

如果您安装了NodeJS,则可以简单地执行以下操作。 – 请注意,这是可用的许多选项之一

安装本地networking服务器

 $ npm install -g local-web-server 

现在,您可以在任何要通过http访问内容的文件夹中使用它。

 $ ws 

导航到http://localhost:8000 (默认端口:8000)