我试图从我的扩展的内容脚本中创建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)'。时会加载什么内容“(待续) –