由于内容安全策略问题,Safari 无法从 blob 创建 Worker

rub*_*nbs 11 safari blob web-worker content-security-policy

我正在尝试在我的网页上创建 Worker:

const url = URL.createObjectURL(blob);
const worker = new Worker(url);
Run Code Online (Sandbox Code Playgroud)

Safari 在控制台中显示以下错误:

拒绝加载 blob:https://my.address.com/5fa7b5e6-cb10-4b7c-967b-e95cae58cd71,因为它既没有出现在内容安全策略的 child-src 指令中,也没有出现在 default-src 指令中。

我的页面上有以下内容安全策略标签:

<meta http-equiv="Content-Security-Policy" content="worker-src 'self' blob:">
Run Code Online (Sandbox Code Playgroud)

但 Safari 似乎忽略了它。我敢打赌我尝试了 SCP 指令(例如worker-src、object-src、script-src、child-src 等)和源(*、blob:、'unsafe-eval'、'unsafe-inline)的所有可能组合', ETC。)

感谢任何想法!

注意事项

  1. 当我通过 http 在 Safari 中打开网页时,创建的 Worker 没有任何错误。问题是通过 https 打开时。
  2. Worker 在 Chrome、Firefox、Edge 中运行良好
  3. 我的页面上只有一个 Content-Security-Policy 标签
  4. 在 Safari 中检查 Http 响应标头时,它们看起来不错

gra*_*nty 13

Safari不支持 worker-src指令(已测试 v 12)并且只是忽略它,请检查控制台中的Unrecognized Content Security Policy directive 'worker-src'消息。

的后备链worker-src是:child-src-> script-src-> default-src,因此要支持 Safari,您必须使用child-src与 相同的规则worker-srcchild-src blob: 在 Safari 中有效(按“blob:”按钮即可查看)。

该消息because it appears in neither the child-src directive nor the default-src directive of the Content Security Policy尚不清楚。您是否已经在保单中制定了一些规则child-src? 因为只是被 Safari 忽略并且不应该阻止工作人员。default-src
<meta http-equiv="Content-Security-Policy" content="worker-src 'self' blob:">