我正在开发几个使用网络工作者的应用程序,所有这些应用程序都使用最新的Chrome V63.0.3230.132
打破了。
这是我在控制台上看到的错误消息:
[仅限报告]拒绝从“http://localhost:8080/d04af186322390d53036.worker.js”创建工作人员,因为它违反了以下内容安全策略指令:“worker-src'none'”。
我也注意到some other sites的行为方式相同。
显然,创造该工人的方式并不重要。 我在使用worker-loader的反应应用程序中尝试了它,但也在我手动创建的简单JS演示中。错误保持不变。
我已经准备好了所有CSP标头,并且使用the correct CSP entry更新了我的manifest.json
文件,但无济于事。
所有其他浏览器都运行良好。
有人可以确认或解释这种行为吗?
答案 0 :(得分:13)
更新:在这种情况下,问题是因为安装并启用了uMatrix插件而导致问题。即使插件关闭,问题仍然存在。因此,有两种方法可以解决这些令人困惑的错误:
详情请见https://github.com/gorhill/uMatrix/issues/926#issuecomment-359905357
历史记录的初步回复。
Xceno ,您是否确认Chrome确实无法加载该工作人员?
我看到完全相同的错误,但是... SW确实有效。也许这只是来自Chrome的假阳性错误。
这是我的代码以及我在控制台中看到的内容
navigator.serviceWorker.register('/sw.js').then(function(registration) {
console.log('ServiceWorker registration successful with scope: ', registration.scope);
// ... some other code
}
控制台输出:
defer.js:36 [Report Only] Refused to create a worker from 'https://.../sw.js' because it violates the following Content Security Policy directive: "worker-src 'none'".
defer.js:37 ServiceWorker registration successful with scope: https://.../
在我的情况下,SW实际上已成功安装并按设计工作。
答案 1 :(得分:1)
正如所承诺的 - 这是标题。我无法将它们作为评论。如您所见,我没有明确拥有CSP标头,唯一与安全相关的标题是x-content-type-options
和x-frame-options
。就是这样。希望它有所帮助。
content-type: text/html; charset=UTF-8
cache-control: must-revalidate, no-cache, private
x-ua-compatible: IE=edge
content-language: en
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
expires: Sun, 19 Nov 1978 05:00:00 GMT
vary: Accept-Encoding
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 3e91b05aabb05540-ORD
content-encoding: br
x-firefox-spdy: h2