Greasemonkey AJAX-запрос из другого домена?

Я пытаюсь заставить 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 срабатывает.

Как я могу разобраться, чтобы я мог получить данные из другого домена в этой настройке?

1 ответ

Решение

Greasemonkey (и Tampermonkey) имеет встроенную поддержку междоменного AJAX. Используйте функцию GM_xmlhttpRequest.

Вот полный пользовательский скрипт, который иллюстрирует процесс:

// ==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) + '...'
                    );
                }
} );

Вы должны также привыкнуть использовать @connect директива - хотя это не является строго обязательным для Greasemonkey в Firefox, пока.

Другие вопросы по тегам