我正在尝试使用JavaScript(使用Greasemonkey)从我自己的站点中提取数据以自定义另一个站点。我使用的代码如下:

function getURL(url, func)
{
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.onload = function (e)
  {
    if (xhr.readyState == 4)
    {
      if (xhr.status == 200)
      {
        func(xhr.responseText, url);
      }
      else
      {
        alert(xhr.statusText, 0);
      }
    }
  };
  xhr.onerror = function (e)
  {
    alert("getURL Error: "+ xhr.statusText); // picks up error here
  };
  xhr.send(null);
}

上面的方法工作得很好,它从URL中获取文本,并将其返回给我传递给该函数的匿名函数,只要该文件与我从其调用的页面位于同一域中即可。但是,如果域不同,则会触发onerror

如何进行分类,以便可以从此设置中的其他域提取数据?

最佳答案

Greasemonkey(和Tampermonkey)具有对跨域AJAX的内置支持。使用the GM_xmlhttpRequest function

这是说明该过程的完整用户脚本:

// ==UserScript==
// @name        _Starter AJAX request in GM, TM, etc.
// @match       *://YOUR_SERVER.COM/YOUR_PATH/*
// @grant       GM_xmlhttpRequest
// @connect     targetdomain1.com
// ==/UserScript==

GM_xmlhttpRequest ( {
    method:     'GET',
    url:        'http://targetdomain1.com/some_page.htm',
    onload:     function (responseDetails) {
                    // DO ALL RESPONSE PROCESSING HERE...
                    console.log (
                        "GM_xmlhttpRequest() response is:\n",
                        responseDetails.responseText.substring (0, 80) + '...'
                    );
                }
} );

您还应该养成使用the @connect directive的习惯-即使Firefox上的Greasemonkey并非严格要求使用它。

关于javascript - 来自不同域的Greasemonkey AJAX请求?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42591928/

10-12 22:46