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,对此我很抱歉。你可以做一个构建步骤,让它更方便。