如果我尝试通过JavaScript文件使用网络工作者,Chrome会抛出错误 -
Uncaught SecurityError:无法创建worker:'(path)/worker.js'中的脚本无法从origin'null'访问。
但如果我们直接使用HTML,它就允许它们。
Chrome can't load web worker上的答案表示Chrome在从本地文件运行脚本时不允许您加载Web工作程序。
为什么chrome不允许Web worker在本地运行?
Web Workers在Firefox,Safari和Edge
中完全正常工作答案 0 :(得分:5)
这个问题已经被问到了。只要您使用相对路径,工作人员应该在从磁盘打开的HTML文件中工作。但是,如果chrome实现了这一点,则存在争议。
我建议您尝试在脚本中使用相对路径:
new Worker("./scripts/worker.js");
如果这不起作用,请参阅此解决方法:https://stackoverflow.com/a/33432215/607407
具体来说,将worker作为函数加载,然后将函数转换为string:
function worker_function() {
// all worker code here
}
var worker = new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'})));
答案 1 :(得分:0)
var cblock=`
function workerFunc(e){
console.info('Hello World!',e.data.msg)
postMessage({msg:'Complete!'})
}
addEventListener('message',workerFunc)
`
var a=new Worker(URL.createObjectURL(new Blob( [cblock], {type:'text/javascript'} )))
a.onmessage=function(e){ console.info('My worker called!',e.data.msg) }
a.onerror=function(e){ console.info( JSON.stringify(e,' ',2) ) }
a.postMessage({ msg:'Chrome WebWorkers work!' })
// Hello World! Chrome WebWorkers work!
// My worker called! Complete!