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

为什么Chrome不允许Web Worker在JavaScript中运行?,javascript,html,google-chrome,web-worker,Javascript,Html,Google Chrome,Web Worker,如果我试图通过JavaScript文件使用web workers,Chrome会抛出一个错误- 未捕获的安全性错误:未能创建工作程序:无法从源“null”访问位于“(路径)/worker.js”的脚本 但是如果我们直接通过HTML使用,它允许它们 上的答案是,当从本地文件运行脚本时,Chrome不允许加载web Worker 为什么chrome不允许网络工作者在本地运行 网络工作者在Firefox、Safari和Edge中工作得非常好这个问题已经被提出了。只要您使用相对路径,辅助程序应该在从磁盘

如果我试图通过JavaScript文件使用web workers,Chrome会抛出一个错误-

未捕获的安全性错误:未能创建工作程序:无法从源“null”访问位于“(路径)/worker.js”的脚本

但是如果我们直接通过HTML使用,它允许它们

上的答案是,当从本地文件运行脚本时,Chrome不允许加载web Worker

为什么chrome不允许网络工作者在本地运行


网络工作者在Firefox、Safari和Edge中工作得非常好

这个问题已经被提出了。只要您使用相对路径,辅助程序应该在从磁盘打开的HTML文件中工作。然而,chrome是否正确实现了这一点一直存在争议

我建议您尝试在脚本中使用相对路径:

new Worker("./scripts/worker.js");
如果不起作用,请参阅此解决方法:

具体来说,将worker作为函数加载,然后将函数转换为字符串:

function worker_function() {
    // all worker code here
}
var worker = new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'})));

从4.00版开始,chrome就支持web workers,也许可以共享您的代码?我怀疑是访问
worker.js
才是问题所在。你的应用程序是运行http(http://,https://)还是从文件系统运行streight(file://)?你提到的答案是“Chrome不允许你从本地文件运行脚本时加载web workers。”这是我真正的问题。为什么我们不能在Chrome中本地使用worker?如果worker js文件在同一目录中,我只需要这样调用它,对吗<代码>新工人(“Worker.js”)@InderpartapCheema如果你在问为什么,那么这是离题的,请参阅帮助中心。这是主题,我也对这个问题感到好奇+更多的问题更有趣-我在2018年用谷歌搜索了一下,我对完全没有相同的问题感到沮丧,因为到目前为止,我预计这类问题会有几十个答案,每个人在这个问题上都有自己的智慧。@VasilyHall我理解你的好奇心和沮丧。但问谷歌Chrome团队为什么要对某项功能做出决定并不是stackoverflow的话题:这纯粹是猜测,除非其中一位决策者真的参与进来。
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!