Ich habe Probleme, new Function
in einem Web Worker zu arbeiten. Ich habe eine HTML-Seite, die einen Web Worker hervorbringt. Dieser Web Worker führt Code durch new Function(str)
aus. Ich versuche, dies in einer gepackten Chrome-App zu verwenden, die eine Seite mit eval
-ähnlichen Code erfordert, der explizit als Sandkastenseite im Manifest aufgeführt wird.Aktivieren Sie "neue Funktion" in einem Web Worker mit CSP
Nun gibt es zwei Möglichkeiten:
- Sie Liste der Seite Sandbox werden. Wenn ich das tue, kann ich
new Function
verwenden, aber ich kann keinen Web Worker erzeugen, weil ich keine Anfragen machen kann (die Sandbox-Seite hat einen eindeutigen Ursprung).new Worker(...)
wirft eineSECURITY_ERR
.new Function
Werke in Sandboxnew Worker
in Sandbox
- nicht Liste der Seite aufgrund einzigartige Herkunft nicht Sandbox werden. Wenn ich dies tue, kann ich einen Web Worker erstellen, aber der Worker kann
new Function
nicht verwenden, da er nicht sandboxed ist.new Function(...)
wirft eineEvalError
beschweren über die Verwendung davon.new Function
nicht in Nicht-Sandbox aufgrundeval
-ähnlichennew Worker
Werke in Nicht-Sandbox
ist
Mein CSP ist wie folgt:
sandbox allow-scripts script-src 'self' 'unsafe-eval'; object-src 'self'
Was kann ich tun, um new Function
in einem Web Worker zu arbeiten?
Es stellte sich heraus, dass 'data:' URLs nicht funktionieren, weil Probleme mit demselben Ursprung auftreten, aber 'createObjectURL' URLs von Blobs (aus dem Artikel) funktionieren. Es ist nicht sehr praktisch, das gesamte Worker-Skript in die Hauptseite einzufügen, aber es scheint die einzige Möglichkeit zu sein, es zum Laufen zu bringen. Vielen Dank. – pimvdb
Oh, ich kann jetzt sehen, dass ich Daten-URL anstelle von Objekt-URL in der Antwort verwendet habe, sorry dafür. Sie könnten vielleicht einen Build-Schritt machen, um es bequemer zu machen. – molnarg