跨域网络工作者(Cross Domain Web Workers)

2019-10-20 05:16发布

我知道,这个问题可能会被认为是重复的,但它是一个新的技术,我不能找到一个最近我发现的确认。 我也觉得可能有用的在一个地方的所有错误信息(随意添加任何其他浏览器)。

试图加载来自另一个域工人脚本:

new Worker('http://otherdomain.co/worker.js');

我已经设置头(使用ModHeader Chrome扩展程序 )来:

Access-Control-Allow-Methods:* Access-Control-Allow-Origin:*

但在Chrome中,我得到:

Uncaught SecurityError: Failed to construct 'Worker': Script at 'http:otherdomain.co/worker.js' cannot be accessed from origin

Safari浏览器给我:

[Error] SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent

火狐给我:

SecurityError: The operation is insecure.

它仍然是,这是不是我们可以做什么? 如果是这样,什么被认为是围绕最佳实践的工作?

Answer 1:

你不允许创建跨域网络工作者。

注:URI为工人构造函数参数必须服从同源策略通过。 目前什么URI是同源的浏览器厂商之间的分歧; 壁虎10.0(火狐10.0 / 10.0的Thunderbird / SeaMonkey的2.7)及更高版本允许数据URI和Internet Explorer 10不允许的Blob URI作为工人的有效脚本。

来源: https://developer.mozilla.org/en/docs/Web/Guide/Performance/Using_web_workers

我能想到的一个解决办法是建立一个服务器端脚本加载所需的远程JS文件,并将其提供给您的域的浏览器。

例如:您提供的URL:

http://YOUR_DOMAIN/getRemoteJS.php

这个PHP文件请求在服务器侧远程文件,和回声它作为响应,并设置mime类型应用程序/ JavaScript的。

我没有亲自尝试这种解决办法,但你也许可以看看它。

祝好运!



Answer 2:

我知道这是一个有点晚了,但是这是你在找什么?

“创建为可以传递给期望的URL。当返回的URL来完成,调用revokeObjectURL()来释放与所创建的URL相关联的资源的方法指定Blob的URL。”

这种方法很容易让你创建使用本地脚本,而不是远程URL一名工人。



文章来源: Cross Domain Web Workers