HTML5 Web工作者是否可以/应该使用CORS进行跨域工作

Can/should HTML5 Web Workers use CORS for cross-origin?

本文关键字:CORS 工作 是否 工作者 Web HTML5      更新时间:2023-09-26

我在创建一个依赖于web worker的托管API时遇到了一个有趣的问题。我希望能得到一些社区的反馈。

我的服务器设置适当的歌珥头提供职工JS文件,可以检索一个XMLHttpRequest对象。然而,当URL被给予new Worker()时,它无法构建,理由是来源是问题。这似乎在Firefox和Chrome上都是一个问题。您可以在这里查看它,以及我的解决方案:http://jsfiddle.net/5ag42hb1/11/

这不是奇怪的行为吗?Mozilla文档说Web worker必须遵守同源策略,并使用CORS来允许跨源访问。

小提琴有一个解决方案,将文件存储在blob中,并将其传递给工作器。但这似乎不太理想,引入了许多不必要的复杂性。有人能想到更干净的解决方案吗?是否有一个良好的渠道来实现这一点?

我在IRC频道上做了很多调查和询问。感谢Mozilla网络上的开发者,我得到了一些很好的答案。希望这篇文章能帮助到和我有同样处境的人。

总而言之,HTML规范概述了运行new Worker('http://remoteorigin.com/worker.js')应该执行具有远程源的安全上下文的工作线程。有点像CORS,但又不完全一样因为它是执行权而不是读权。

那为什么现在不是这样呢?因为浏览器还没有实现完整的规范。把它记为值得期待的事情。

之前,实际上有2个解决方案。我在上面概述了blob方法,但我们也可以使用importScripts()。如果你不能修改Worker本身,你可以创建一个shell Worker来实现你真正想要的Worker。

我遇到了类似的问题,并部分修复了data: url:https://www.npmjs.com/package/crossoriginworker

对于一些解决方案来说,这已经足够好了,但是当我们要使用一些更高级的api(如BarcodeDetector)时,事情就变得越来越困难了。