6
我在new Function
在Web Worker中工作时遇到问题。我有一个产生Web Worker的HTML页面。该Web Worker通过new Function(str)
执行代码。我试图在打包的Chrome应用中使用此功能,该功能需要使用类似eval
的代码在清单中明确列为沙盒页面。使用CSP在Web Worker中启用“新功能”
现在,有两种选择:
- 做名单将沙箱的页面。如果我这样做,我可以使用
new Function
,但我无法派生Web Worker,因为我无法提出任何请求(沙盒页面具有唯一的来源)。new Worker(...)
会抛出一个SECURITY_ERR
。new Function
由于独特的产地作品沙箱new Worker
在沙箱中失败
- 不要列表被沙盒的页面。如果我这样做了,我可以派生出一个Web Worker,但工作人员不能使用
new Function
,因为它不是沙箱。抱怨使用它new Function(...)
抛出EvalError
。new Function
非沙盒失败,因为在非沙箱是eval
样new Worker
作品
我CSP如下:
sandbox allow-scripts script-src 'self' 'unsafe-eval'; object-src 'self'
我能做得到new Function
在网络工作者?
事实证明'data:'URL不起作用,因为同源问题,但来自blob(来自文章)的'createObjectURL' URL起作用。将整个工作脚本嵌入主页面并不是很方便,但它似乎是实现它的唯一方法。谢谢。 – pimvdb
哦,我现在可以看到,我在回答中使用了数据url而不是对象url,对此抱歉。你也许可以做一个构建步骤来使它更方便。 – molnarg