Ace 编辑器中的 JSHint worker 在静态 HTML 页面上被阻止
JSHint worker in Ace editor is blocked on static HTML page
我尝试从计算机上的 HTML 文件加载 Ace editor(使用 file:///
协议)以编辑 JavaScript:
ace.edit("editor", {
"mode": "ace/mode/javascript",
})
但是,CSP 会阻止 JSHint(Ace 默认实现)使用的 worker。以下错误记录到控制台:
Content Security Policy: The page’s settings blocked the loading of a resource at blob:null/[...] (“worker-src”).
当我将loadWorkerFromBlob
设置为false
时:
ace.config.set("loadWorkerFromBlob", false)
产生了不同的错误:
Security Error: Content at file:///[...]/index.html may not load data from file:///[...]/ace/worker-javascript.js.
我试过用<meta http-equiv="Content-Security-Policy">
绕过CSP但是没用,搜索这个问题也没有结果。
如何从本地 HTML 页面在 Ace 编辑器中使用 JSHint?
编辑:忘记说明这只是 Firefox 的问题。第一个示例在 Chromium 上对我来说完全没问题。
file://
URL 产生一个 null
来源,如您在错误消息中所见:
The page’s settings blocked the loading of a resource at blob:null/[...]
因此 CORS 不支持本地 file://
访问,请参阅 here and here。
还有 Chrome doesn't let you load web workers when running scripts from a local file.
上面的链接包含一些解决方法,但我认为最好的方法是 运行 本地服务器通过网络方案 (http://localhost/...) 加载工作人员。
我尝试从计算机上的 HTML 文件加载 Ace editor(使用 file:///
协议)以编辑 JavaScript:
ace.edit("editor", {
"mode": "ace/mode/javascript",
})
但是,CSP 会阻止 JSHint(Ace 默认实现)使用的 worker。以下错误记录到控制台:
Content Security Policy: The page’s settings blocked the loading of a resource at blob:null/[...] (“worker-src”).
当我将loadWorkerFromBlob
设置为false
时:
ace.config.set("loadWorkerFromBlob", false)
产生了不同的错误:
Security Error: Content at file:///[...]/index.html may not load data from file:///[...]/ace/worker-javascript.js.
我试过用<meta http-equiv="Content-Security-Policy">
绕过CSP但是没用,搜索这个问题也没有结果。
如何从本地 HTML 页面在 Ace 编辑器中使用 JSHint?
编辑:忘记说明这只是 Firefox 的问题。第一个示例在 Chromium 上对我来说完全没问题。
file://
URL 产生一个 null
来源,如您在错误消息中所见:
The page’s settings blocked the loading of a resource at blob:null/[...]
因此 CORS 不支持本地 file://
访问,请参阅 here and here。
还有 Chrome doesn't let you load web workers when running scripts from a local file.
上面的链接包含一些解决方法,但我认为最好的方法是 运行 本地服务器通过网络方案 (http://localhost/...) 加载工作人员。