Включить "новую функцию" в Web Worker с CSP
У меня проблемы с получением new Function
работать в веб-работнике. У меня есть HTML-страница, которая порождает веб-работника. Этот веб-работник выполняет код через new Function(str)
, Я пытаюсь использовать это в упакованном приложении Chrome, для которого требуется страница, использующая eval
-подобный код для явного перечисления в манифесте в виде изолированной страницы.
Теперь есть два варианта:
- Сделайте список страницы, которая будет помещена в песочницу Если я сделаю это, я могу использовать
new Function
, но я не могу порождать Web Worker, потому что я не могу делать никаких запросов (у изолированной страницы есть уникальное происхождение).new Worker(...)
бросаетSECURITY_ERR
,new Function
работает в песочницеnew 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
работа в веб-работнике?
1 ответ
Есть методика, называемая встроенными работниками, я бы предложил использовать это.
- Создайте объект Blob, который содержит исходный код для работника
- Преобразуйте его в "dataurl"
- Создайте работника с этим dataurl
Это описано с помощью примера кода на сайте HTML5-камней в их учебном руководстве по WebWorkers. Таким образом, вы можете перечислить сайт как "песочницу", но поскольку нет необходимости выполнять внешние запросы, он должен работать и в режиме "песочницы".