我試圖從我的擴展的內容腳本中創建Web Worker,但它被SecurityError(同源策略)阻止。什麼是最好的方法來做到這一點?從Chrome擴展內容腳本創建Web Worker
從我的內容腳本:
var workerURL = chrome.extension.getURL("js/searchWorker.js");
var lunrWorker = new Worker(workerURL);
從清單:
"content_scripts": [
{
"matches": ["http://localhost:8000/*"],
"js": ["js/jquery.min.js", "js/jquery.highlight.js", "js/index.js"],
"css": ["css/bootstrap.css", "css/styles.css"]
}
]
我也試過在我的艙單,這一點,但它並沒有幫助:
"content_security_policy": "default-src 'none'; style-src 'self'; script-src 'self';",
(旁註:CSS沒有被注入到頁面中,我不確定這是否是同一問題的症狀或不相關)
哦,男人,這是一個無賴這是一個錯誤。這個腳本非常適合加載我的網絡工作者。現在我遇到了importScript不能在worker中工作的問題,我得到了''WorkerGlobalScope'上無法執行'importScripts':URL'lunr.min.js'無效' – CambridgeMike
實際上,它看起來像我需要在eventlistener中執行importScript,並傳遞chrome.extension.getURL返回的路徑。這感覺相當sl,,因爲沒有保證我的工作人員在importScript完成並執行導入的腳本之前不會開始接收其他消息。或者它會停止執行,因爲它是一個單線程? – CambridgeMike
'importScript' /'importScripts'是同步函數,所以不可能在worker腳本的運行時對它們進行填充(任何與worker的通信都是異步的)。理論上講,這也可以通過首先掃描workerScript字符串for importScript(...)來獲取數據並替換內容,然後我接近一個完整的腳本加載器,這是非常多的的工作(並且它不會100%可靠,因爲靜態分析無法知道在使用'var file ='x.js'; importScript(file)'。時會加載什麼內容「(待續) –