【问题标题】:How do I allow Cross-Origin Requests from greasemonkey scripts in Firefox?如何在 Firefox 中允许来自greasemonkey 脚本的跨域请求?
【发布时间】:2014-09-01 12:31:47
【问题描述】:

我正在开发一个 Greasemonkey 脚本,它在网页上实现了几个工具。此脚本向

发出数据请求
http://localhost/chess/heartbeat.php 

现在在 Firefox 中,我收到了这个控制台错误,它完全停止了我的 jQuery AJAX 数据请求。

跨域请求被阻止:同源策略不允许读取远程资源

http://localhost/chess/heartbeat.php.

可以通过将资源移动到同一域或启用 CORS 来解决此问题。

我可以使用谷歌浏览器解决这个问题。当我将它作为 chrome 的简单浏览器扩展时,我可以让它做与 Greasemonkey 相同的事情,并且我可以将以下权限添加到插件的清单文件中,这允许我发出与 Firefox 相同的数据请求被阻止:

"permissions": [
    "<all_urls>"
  ]

无论如何,这适用于 chrome,但我想在 Firefox 上实现相同的效果。我一直在研究这个问题,但找不到简单的答案。

【问题讨论】:

标签: javascript google-chrome firefox cross-domain localhost


【解决方案1】:

通常XMLHttpRquest,包括围绕它的 jQuery 更高级别的 API,不允许无限制的跨站点请求,但受到同源策略和 CORS 的限制。

正如@epascarello 已经指出的那样,您可以使用GM.xmlHttpRequest,它允许您执行任何跨站点XHR,即使服务器没有实现CORS 或允许源站点。它还附带一些其他好东西。

您应该在您的用户脚本中添加一个@grant GM.xmlHttpRequest 元数据块,否则您的脚本将来可能会中断。

既然您提到了 Chrome 扩展:Firefox 扩展也可以执行跨站点 XHR。例如大多数用户脚本应该可以使用 PageMod 轻松移植到 SDK 插件,并启用 certain permissions 类似于您在 Chrome 扩展程序中所做的事情。

【讨论】:

  • 如果有一个跨浏览器的方法可以在脚本和扩展上工作,它会让事情变得更容易。
  • 他们只在扩展范围内执行 XHR,而不是在页面范围内执行,这使得这变得相当困难。
猜你喜欢
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 2015-05-22
  • 2011-10-13
  • 1970-01-01
  • 2013-03-24
  • 2012-04-27
  • 2020-07-22
相关资源
最近更新 更多