【问题标题】:Cross Domain Web Workers跨域网络工作者
【发布时间】:2014-07-20 03:37:57
【问题描述】:

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

尝试从另一个域加载工作脚本:

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

我已将标题(使用ModHeader Chrome Extension)设置为:

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

Firefox 给了我:

SecurityError: The operation is insecure.

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

【问题讨论】:

标签: javascript browser cross-domain web-worker xdomainrequest


【解决方案1】:

我知道现在有点晚了,但是is this what you're looking for?

"为指定的 blob 创建一个 url,可以将其传递给需要 url 的方法。完成返回的 url 后,调用 revokeObjectURL() 释放与创建的资源相关的资源 网址。”

这种方法可以轻松地让您使用本地脚本而不是远程 url 创建 Worker。

【讨论】:

  • 哦,我喜欢这个!
【解决方案2】:

您不能创建跨域网络工作者。

注意:作为 Worker 构造函数的参数传递的 URI 必须遵守 同源策略。目前各方意见不一 浏览器供应商关于哪些 URI 是同源的;壁虎 10.0 (Firefox 10.0 / Thunderbird 10.0 / 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-type 设置为 application/javascript。

我没有亲自尝试过这种解决方法,但您或许可以研究一下。

祝你好运!

【讨论】:

  • 好主意,虽然超级 hacky!
  • 很高兴你喜欢它,我同意,它有点老套。如果对您有用,请将其标记为正确答案。谢谢!
  • 我坚持要一个更好的!
  • 您也可以使用<iframe>postMessage 来解决这个问题?不过我不会去那里 - 它会很脆弱且难以理解。
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2022-07-06
  • 2013-10-10
  • 2013-05-18
  • 1970-01-01
相关资源
最近更新 更多