可以/应该HTML5 Web Workers使用CORS进行跨域起源吗?

时间:2014-08-23 03:12:28

标签: javascript html5 cors web-worker

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

我的服务器设置了相应的CORS标头,以提供工作者JS文件,并可以使用XMLHttpRequest对象进行检索。但是,当URL被赋予new Worker()时,它无法构建,引用原点是问题。这似乎是Firefox和Chrome上的一个问题。请亲自检查一下我的解决方法:http://jsfiddle.net/5ag42hb1/11/

这不是奇怪的行为吗? Mozilla文档说Web Workers must obey same-origin policy并使用CORS来允许跨域访问。

这个小提琴有一个解决方法,可以将文件存储在blob中,然后将其传递给worker。虽然看起来不太理想,但却引入了许多不必要的复杂性。谁能想到更清洁的解决方案?是否有良好的渠道可以正确实施?

1 个答案:

答案 0 :(得分:8)

我做了很多挖掘并询问了IRC频道。感谢Mozilla网络上的#developers中的人们,我得到了一些非常好的答案。希望这能帮助处于与我相同情况的任何人。

总而言之,HTML规范概述了运行new Worker('http://remoteorigin.com/worker.js')应该使用远程源的安全上下文来执行worker。有些东西就像CORS,但并不完全是因为它是执行权而不是阅读权。

那为什么不是现在如何运作呢?因为浏览器还没有实现完整的规范。把它作为值得期待的东西来粉笔。

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