Mam problem z uzyskaniem new Function
do pracy w Web Worker. Mam stronę HTML, która spawns Web Worker. Ten pracownik sieci Web wykonuje kod przez new Function(str)
. Próbuję użyć tego w pakiecie aplikacji Chrome, która wymaga strony, która jest jawnie wymieniona jako strona piaskownicy w manifeście.Włączanie "nowej funkcji" w module Web Worker z CSP
Obecnie istnieją dwie opcje:
- uwagi notować strony do piaskownicy. Jeśli to zrobię, mogę użyć
new Function
, ale nie mogę odrodzić pracownika sieci Web, ponieważ nie mogę wysyłać żadnych żądań (strona piaskownicy ma unikatowe pochodzenie).new Worker(...)
wyrzucaSECURITY_ERR
.new Function
działa w piaskownicynew Worker
zawodzi w piaskownicy ze względu na unikalną pochodzenia
- Czy nie notować strony do piaskownicy. Jeśli to zrobię, mogę odrodzić pracownika sieci Web, ale pracownik nie może użyć
new Function
, ponieważ nie jest on piaskownicą.new Function(...)
rzucaEvalError
narzeka na korzystanie z niego.new Function
nie powiedzie się w non-piaskownicy z powodu byciaeval
-jaknew Worker
prace w non-piaskownicy
Moja CSP jest następujący:
sandbox allow-scripts script-src 'self' 'unsafe-eval'; object-src 'self'
co mogę zrobić, aby uzyskać new Function
pracę w Web Worker?
Okazało się, że adresy URL 'data:' nie działają z powodu problemów o tym samym pochodzeniu, ale adresy URL 'createObjectURL' z obiektów typu blob (z artykułu) działają. Nie jest zbyt wygodne wstawianie całego skryptu roboczego na stronę główną, ale wydaje się, że jest to jedyny sposób na sprawne działanie. Dzięki. – pimvdb
Och, widzę teraz, że użyłem URL danych zamiast adresu URL obiektu w odpowiedzi, przepraszam za to. Możesz zrobić krok konstrukcyjny, aby był bardziej wygodny. – molnarg