Javascript 启用';新功能';在具有CSP的Web Worker中

Javascript 启用';新功能';在具有CSP的Web Worker中,javascript,google-chrome,web-worker,content-security-policy,function-constructor,Javascript,Google Chrome,Web Worker,Content Security Policy,Function Constructor,我在让新功能在Web Worker中工作时遇到问题。我有一个HTML页面,生成了一个Web工作者。此Web Worker通过新函数(str)执行代码。我正试图在一个打包的Chrome应用程序中使用它,它需要一个使用eval-like代码的页面被显式地列为清单中的沙盒页面 现在,有两种选择: 执行列出要沙盒的页面。如果我这样做,我可以使用新函数,但我无法生成Web Worker,因为我无法发出任何请求(沙盒页面具有唯一的来源)新工作程序(…)抛出一个安全错误。 新函数在沙箱中工作 newwor

我在让
新功能
在Web Worker中工作时遇到问题。我有一个HTML页面,生成了一个Web工作者。此Web Worker通过
新函数(str)
执行代码。我正试图在一个打包的Chrome应用程序中使用它,它需要一个使用
eval
-like代码的页面被显式地列为清单中的沙盒页面

现在,有两种选择:

  • 执行列出要沙盒的页面。如果我这样做,我可以使用
    新函数
    ,但我无法生成Web Worker,因为我无法发出任何请求(沙盒页面具有唯一的来源)<代码>新工作程序(…)抛出一个
    安全错误
    • 新函数
      在沙箱中工作
    • newworker
      由于唯一来源而在沙箱中失败
  • 不要列出要沙盒的页面。如果我这样做,我可以生成一个Web Worker,但是Worker不能使用
    新函数
    ,因为它不是沙盒<代码>新函数(…)抛出一个
    EvalError
    来抱怨它的使用。
    • 新功能
      在非沙箱中失败,原因是
      评估
      类似
    • 新工人
      在非沙箱中工作
我的顾客服务计划如下:

sandbox allow-scripts script-src 'self' 'unsafe-eval'; object-src 'self'

如何让
新功能
在Web Worker中工作?

有一种称为内联workers的技术,我建议使用它

  • 创建包含工作程序源代码的Blob对象
  • 将其转换为“dataurl”
  • 使用此dataurl实例化工作进程

在HTML5 rocks网站上的示例代码中描述了这一点。通过这种方式,您可以将站点列为沙盒,但由于不需要执行外部请求,它也应该在沙盒模式下工作。

结果是
数据:
URL不工作,因为源代码相同,但是
createObjectURL
Blob中的URL(来自文章)可以工作。将整个worker脚本内联到主页面中不是很方便,但这似乎是使其工作的唯一方法。谢谢。哦,我现在明白了,我在回答中使用了数据url而不是对象url,对此我很抱歉。你可以做一个构建步骤,让它更方便。