来自不同域的 Greasemonkey AJAX 请求?
Greasemonkey AJAX request from a different domain?
我正在尝试让 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 和 returns 获取文本到我传递给函数的匿名函数,只要文件在同一个域中作为我调用它的页面。但是,如果域不同,则会触发 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)从我自己的站点中提取数据以自定义另一个站点。我使用的代码如下:
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 和 returns 获取文本到我传递给函数的匿名函数,只要文件在同一个域中作为我调用它的页面。但是,如果域不同,则会触发 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 并非严格要求如此。