7

new FunctionWebワーカーで作業するのに問題があります。Webワーカーを生成するHTMLページがあります。このWebワーカーは、を介してコードを実行しますnew Function(str)。これをパッケージ化されたChromeアプリで使用しようとしています。このアプリでevalは、マニフェストにサンドボックス化されたページとして明示的にリストされるようなコードを使用するページが必要です。

現在、2つのオプションがあります。

  • サンドボックス化するページをリストしてくださいそうすれば、を使用できますnew Functionが、要求を行うことができないため、Webワーカーを生成できません(サンドボックス化されたページには固有のオリジンがあります)。new Worker(...)をスローしSECURITY_ERRます。
    • new Functionサンドボックスで動作します
    • new Worker固有の起源のためにサンドボックスで失敗する
  • サンドボックス化するページをリストしないでください。そうすれば、Webワーカーを生成できますが、new Functionサンドボックス化されていないため、ワーカーは使用できません。それの使用について不平を new Function(...)投げます。EvalError
    • new Functionevalのようなものであるために非サンドボックスで失敗する
    • new Workerサンドボックス以外で動作します

私のCSPは次のとおりです。

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

new FunctionWebワーカーで作業するにはどうすればよいですか?

4

1 に答える 1

5

インラインワーカーと呼ばれる手法がありますが、それを使用することをお勧めします。

  • ワーカーのソースコードを含むBlobオブジェクトを作成します
  • それを「dataurl」に変換します
  • このdataurlでワーカーをインスタンス化します

これは、 WebWorkersチュートリアルのHTML5rocksサイトのサンプルコードで説明されています。このようにして、サイトをサンドボックスとしてリストすることができますが、外部リクエストを行う必要がないため、サンドボックスモードでも機能するはずです。

于 2013-01-23T13:40:58.357 に答える