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)