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, пока.