6
我在new Function
在Web Worker中工作時遇到問題。我有一個產生Web Worker的HTML頁面。該Web Worker通過new Function(str)
執行代碼。我試圖在打包的Chrome應用中使用此功能,該功能需要使用類似eval
的代碼在清單中明確列爲沙盒頁面。使用CSP在Web Worker中啓用「新功能」
現在,有兩種選擇:
- 做名單將沙箱的頁面。如果我這樣做,我可以使用
new Function
,但我無法派生Web Worker,因爲我無法提出任何請求(沙盒頁面具有唯一的來源)。new Worker(...)
會拋出一個SECURITY_ERR
。new Function
由於獨特的產地作品沙箱new Worker
在沙箱中失敗
- 不要列表被沙盒的頁面。如果我這樣做了,我可以派生出一個Web 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
在網絡工作者?
事實證明'data:'URL不起作用,因爲同源問題,但來自blob(來自文章)的'createObjectURL' URL起作用。將整個工作腳本嵌入主頁面並不是很方便,但它似乎是實現它的唯一方法。謝謝。 – pimvdb
哦,我現在可以看到,我在回答中使用了數據url而不是對象url,對此抱歉。你也許可以做一個構建步驟來使它更方便。 – molnarg