JavaScript:";未捕获的安全性错误“;在本地运行JS-XSL演示时

JavaScript:";未捕获的安全性错误“;在本地运行JS-XSL演示时,javascript,excel,parsing,Javascript,Excel,Parsing,(这个问题与找到的JS-XSL演示有关) 简单地告诉你这个演示是为了什么;它将MS Excel文件作为输入,解析数据,并以纯文本格式输出数据。我下载了这个包(zip)并在本地运行,只需用Chrome打开html文件 问题是,我似乎无法克服以下错误: Uncaught SecurityError: Failed to construct 'Worker': Script at 'file:///C:/Users/David/Desktop/Xlsx%20Demo/xlsworker.js' can

(这个问题与找到的JS-XSL演示有关)

简单地告诉你这个演示是为了什么;它将MS Excel文件作为输入,解析数据,并以纯文本格式输出数据。我下载了这个包(zip)并在本地运行,只需用Chrome打开html文件

问题是,我似乎无法克服以下错误:

Uncaught SecurityError: Failed to construct 'Worker': Script at 'file:///C:/Users/David/Desktop/Xlsx%20Demo/xlsworker.js' cannot be accessed from origin 'null'.
上面的错误指向html文件的第34行,该行包含以下代码:

/* I changed the file path from './xlsworker.js' to 'xlsworker.js' */
var worker = new Worker('xlsworker.js');
这个演示只有三个文件:html文件本身和两个javascript文件,一个名为
xls.js
,另一个名为
xlsworker.js
。这三个文件都位于同一目录中,并且处于同一级别

让我相当困惑的是,大约几个月前,我成功地运行了相同的演示!我无法想象我现在是否在做任何不同的事情。有什么见解吗?

Chromium基本上阻止您在file://协议上使用worker,您必须托管您的文件并通过http://协议访问它们


您需要一个服务器(即使是像这样简单的东西)

IMO,下面是一个更好的答案,因为它不需要运行web服务器。它非常快速和简单

(我在下面的注5中解释了否决票的原因)

我已经测试并验证了这个解决方案在按照asker所描述的本地运行时,能够与asker链接的demo一起工作。在Windows 10上测试,铬稳定x64 48.0.2564.103 m

不允许脚本访问Chrome中的本地文件系统。如果你想在本地测试网络工作者,你必须打开带有特殊标志的Chrome

在Windows上,启动带有以下标志的chrome:

chrome.exe --allow-file-access-from-files
之后,Chrome将启动,您可以在此会话期间测试工作人员

注1:如果运行此命令时Chrome已在运行,Chrome的新实例将不允许Worker运行--您必须首先退出Chrome(如有必要,请使用Windows任务管理器确保Chrome未运行)

注2:此答案的来源(下面的链接)包括Windows上的--args标志,但我没有发现Windows上需要使用“args”。事实上,我在任何地方都找不到任何关于“args”标志的文档——不知道它是做什么的。因此,我没有将其包含在上面的Windows命令中。*

注3:对于那些试图在Chrome Mac或Windows Firefox上执行类似操作的用户,下面的链接包括这两者,以及上面的Windows Chrome解决方案。但我上面描述的解决方案只是Windows Chrome方法

注意4:请注意,此解决方案与运行web服务器不同,但就您的目的而言,它应该是一个完全合适的解决方案。此外,请注意,在启用此chrome启动开关的情况下浏览web可能会危害您的本地文件安全,因此建议您仅将此方法用于本地文件,并在web浏览时禁用。*


注5:谷歌表示,使用启动标志“只能用于临时情况,将来可能会中断。”对chrome启动开关的Web搜索返回约2000次点击,因此许多人使用这些标志并在博客上发布相关信息。如果您的需要是暂时的,那么目前效果很好。*

您可能需要一台服务器来运行此功能。@mpm-这一定是原因;我又让它运转起来了。谢谢谢谢你,尼克。我将查看链接。建议不支持的命令行标志和
about:config
更改不是一个好建议<代码>文件://URL可以表现出正常的
http://
https://
URL所没有的各种行为差异,因此正确的方法是确实使用本地web服务器。还要注意,
--incognito
在任何方面都不安全,它不像普通的Chrome实例那样被沙盒。它只是不保存cookie、历史记录和本地数据。这不是“安全的”,它只是“私有的”。“建议不受支持的命令行标志和关于:配置更改不是一个好的建议….incognito不更安全”我没有建议上述任何一种。
--允许从文件访问文件
是一个不受支持的命令行标志
security.fileuri.strict\u origin\u policy
是一个
about:config
条目<代码>--隐姓埋名是关于你提交的另一篇文章(我承认,我拒绝了这篇文章,因为它脱离了谷歌集团的背景。)“--允许从文件访问文件是不受支持的命令行标志。”**您如何知道它是“不受支持的”?“security.fileuri.strict_origin_policy是一个about:config条目。”**我没有说security.fileuri.strict_origin_policy,也没有说任何其他about:config。配置到底有什么问题?询问者是开发环境中的程序员,而不是最终用户。“--隐姓埋名是关于你提交的另一篇帖子(我承认,我拒绝了这篇帖子,因为它与谷歌集团无关。”**基于我在其他地方发布的内容在这里抱怨和否决投票是不合法的。