7

我无法new Function在 Web Worker 中工作。我有一个生成 Web Worker 的 HTML 页面。这个 Web Worker 通过new Function(str). 我正在尝试在打包的 Chrome 应用程序中使用它,该应用程序需要使用类似eval代码的页面在清单中明确列为沙盒页面。

现在,有两种选择:

  • 列出要沙盒化的页面如果这样做,我可以使用new Function,但我无法生成 Web Worker,因为我无法发出任何请求(沙盒页面具有唯一的来源)。new Worker(...)抛出一个SECURITY_ERR.
    • new Function在沙箱中工作
    • new Worker由于唯一来源而在沙箱中失败
  • 不要列出要沙盒化的页面。如果这样做,我可以生成一个 Web Worker,但该 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在 Web Worker 中工作?

4

1 回答 1

5

有一种称为内联工作者的技术,我建议使用它。

  • 创建一个包含 worker 源代码的 Blob 对象
  • 将其转换为“dataurl”
  • 用这个 dataurl 实例化 worker

这在他们的WebWorkers 教程中的 HTML5 Rocks 站点上使用示例代码进行了描述。这样,您可以将站点列为沙盒,但由于不需要执行外部请求,它也应该在沙盒模式下工作。

于 2013-01-23T13:40:58.357 回答