如何在Firefox中允许来自Greasemonkey脚本的跨源请求?

14
我正在开发一个Greasemonkey脚本,它会在网页上实现一些工具。这个脚本会向服务器请求数据。
http://localhost/chess/heartbeat.php 

目前,在Firefox中我遇到了一个控制台错误,这完全阻止了我的jQuery AJAX请求数据。

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

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

这可以通过将资源移动到相同的域或启用CORS来解决。

我能够通过使用Google Chrome解决这个问题。当我将它作为Chrome浏览器的简单扩展时,我能够让它像Greasemonkey一样做同样的事情,并且我可以在插件的清单文件中添加以下权限,从而使我能够进行与Firefox阻止的相同数据请求:

"permissions": [
    "<all_urls>"
  ]

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


http://wiki.greasespot.net/GM_xmlhttpRequest - epascarello
成功了,你真是我的救星! - user3810422
1个回答

15

通常情况下,使用XMLHttpRquest,包括jQuery的高级API,不允许无限制的跨站请求,而是受到同源策略和CORS的限制。

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

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

既然你提到了Chrome扩展程序:Firefox扩展程序也可以执行跨站XHR。例如,大多数用户脚本应该可以很容易地通过使用PageMod和启用某些权限类似于在Chrome扩展中所做的方式来移植到SDK附加组件。


1
如果有一种跨浏览器的方法可以在脚本和扩展上运行,那将会使事情变得更加容易。 - user280109
他们只在扩展范围内执行XHR,而不是页面范围,这使得这个过程相当困难。 - Ryan Leach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接