【问题标题】:Why does not Chrome allow Web Workers to be run in JavaScript?为什么 Chrome 不允许 Web Workers 在 JavaScript 中运行?
【发布时间】:2016-10-09 16:12:33
【问题描述】:

如果我尝试通过 JavaScript 文件使用网络工作者,Chrome 会抛出错误 -

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

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

Chrome can't load web worker 上的答案说 Chrome 不允许您在从本地文件运行脚本时加载网络工作者。

为什么 chrome 不允许 web worker 在本地运行?

Web Workers 在 Firefox、Safari 和 Edge 中运行良好

【问题讨论】:

  • 自 4.00 版起,chrome 已支持 web worker,也许分享您的代码?我怀疑是访问worker.js 这就是问题所在。
  • 您的应用程序是在运行 http (http://, https://) 还是从文件系统 (file://) 直接运行?

标签: javascript html google-chrome web-worker


【解决方案1】:
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! 

【讨论】:

    【解决方案2】:

    这个问题已经被问过了。只要您使用相对路径,工作人员应该在从磁盘打开的 HTML 文件中工作。但是,如果 chrome 正确地实现了这一点,则存在争议。

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

    new Worker("./scripts/worker.js");
    

    如果这不起作用,请参阅以下解决方法:https://stackoverflow.com/a/33432215/607407

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

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

    【讨论】:

    • 您提到的答案是“Chrome 不允许您在从本地文件运行脚本时加载网络工作者。”这是我的实际问题。为什么我们不能在 Chrome 本地使用 worker?
    • 如果worker js文件在同一个目录中,我只需要这样称呼它对吗? new Worker("worker.js");
    • @InderpartapCheema 如果您要问为什么,那么这不是主题,请参阅帮助中心。
    • 这是一个话题,我也对此感到好奇 + 越多问题越高兴 - 我在 2018 年使用谷歌搜索这个问题,并且对完全没有像现在我期望的那样的相同问题感到沮丧为这种事情做几十个答案,每个人都在这个问题上闪耀着自己的智慧。
    • @VasilyHall 我理解你的好奇和沮丧。但是,问 Google Chrome 团队“为什么”对某个功能做出决定并不是 stackoverflow 上的话题:这纯粹是猜测——除非其中一位决策者真正参与进来。
    猜你喜欢
    • 2016-08-10
    • 2011-10-28
    • 1970-01-01
    • 2013-03-13
    • 2020-06-02
    • 2018-04-15
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多