6

Webワーカーでnew Functionを動作させるのに問題があります。 Web Workerを生成するHTMLページがあります。このWebワーカーはnew Function(str)でコードを実行します。私はパッケージ化されたChromeアプリケーションでこれを使用しようとしています。この場合、evalのようなコードを明示的にマニフェストのサンドボックスページとして表示する必要があります。CSPのWebワーカーで「新しい機能」を有効にする

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

  • ページがサンドボックス化されるリストを行います。私がそうした場合、私はnew Functionを使うことができますが、私は要求をすることができないのでWebワーカーを生成できません(サンドボックスされたページには固有の起源があります)。 new Worker(...)SECURITY_ERRをスローします。サンドボックス
  • new Workerが原因独特の原点にサンドボックスで失敗し
    • new Function作品ページをサンドボックス化されていないリストを行います。私がそうすれば、私はWebワーカーを生成することができますが、従業員はサンドボックス化されていないのでnew Functionを使用できません。 new Function(...)は、その使用について文句をEvalErrorがスローします。

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

      私は何をすることができます:次のように起因する非サンドボックス

  • eval
  • new Worker作品

    であることに私のCSPがある

    • new Functionは、非サンドボックスに失敗しましたウェブワーカーでnew Functionを働かせるにはどうすればよいですか?

  • 答えて

    5

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

    • これは、上の例のコードで記述されている。このdataurlで

    を労働者をインスタンス化し、作業者

  • のソースコードは、「dataurl」
  • に変換含まれているBlobオブジェクトを作成します。 HTML5のサイトはWebWorkers tutorialにあります。この方法でサイトをサンドボックスとして一覧表示できますが、外部リクエストを行う必要はないため、サンドボックスモードでも機能するはずです。

  • +0

    同じ起源の問題のために 'data:' URLは機能しませんでしたが、(記事の)ブロブからの 'createObjectURL' URLは機能します。ワーカースクリプト全体をメインページにインライン展開するのはあまり便利ではありませんが、それを有効にする唯一の方法と思われます。ありがとう。 – pimvdb

    +0

    ああ、答えの中でオブジェクトURLの代わりにデータURLを使用したことがわかりました。申し訳ありません。より便利にするために、ビルドの手順を実行することもできます。 – molnarg

    関連する問題