为什么Chrome不允许Web Worker在JavaScript中运行?

时间:2016-06-09 06:46:41

标签: javascript html google-chrome web-worker

如果我尝试通过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

中完全正常工作

2 个答案:

答案 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!