如何从Firefox中的greasemonkey脚本中允许跨源请求?

use*_*422 6 javascript firefox google-chrome localhost cross-domain

我正在开发一个Greasemonkey脚本,它在网页上实现了一些工具.此脚本发出数据请求

http://localhost/chess/heartbeat.php 
Run Code Online (Sandbox Code Playgroud)

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

跨源请求已阻止:同源策略禁止读取远程资源

http://localhost/chess/heartbeat.php.
Run Code Online (Sandbox Code Playgroud)

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

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

"permissions": [
    "<all_urls>"
  ]
Run Code Online (Sandbox Code Playgroud)

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

nma*_*ier 8

通常情况下XMLHttpRquest,包括jQuery的高级API,不允许不受限制的跨站点请求,但受同源策略和CORS的限制.

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

您应该@grant GM_xmlhttpRequest向用户脚本添加元数据块,否则您的脚本将来可能会中断.

由于您提到了Chrome扩展程序:Firefox扩展程序也可以执行跨站点XHR.例如,大多数用户脚本应该可以轻松移植到SDK附加组件,PageMod并启用某些权限,类似于您在Chrome扩展程序中执行的操作.