[英]Greasemonkey AJAX request from a different domain?
I'm trying to get JavaScript (with Greasemonkey) to pull data from my own site to customize another site. 我正在尝试使用JavaScript(使用Greasemonkey)从我自己的站点提取数据来自定义另一个站点。 The code I'm using is as follows: 我正在使用的代码如下:
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);
}
The above works perfectly fine, it gets the text from the URL and returns it to the anonymous function that I pass into the function, as long as the file is on the same domain as the page I'm calling it from. 以上工作完全正常,它从URL获取文本并将其返回到我传递给函数的匿名函数,只要该文件与我调用它的页面位于同一个域中。 However, if the domain is different then the onerror
gets triggered. 但是,如果域不同,则会触发onerror
。
How can I sort it out so I can pull in data from a different domain in this set up? 如何对其进行排序,以便在此设置中从其他域中提取数据?
Greasemonkey (and Tampermonkey) has built-in support for cross-domain AJAX. Greasemonkey(和Tampermonkey)内置了对跨域AJAX的支持。 Use the GM_xmlhttpRequest function . 使用GM_xmlhttpRequest函数 。
Here's a complete userscript that illustrates the process: 这是一个完整的用户脚本,说明了该过程:
// ==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) + '...'
);
}
} );
You should also get in the habit of using the @connect
directive -- even though it's not strictly required for Greasemonkey on Firefox, yet. 你也应该养成使用@connect
指令的习惯 - 尽管对于Firefox上的Greasemonkey并不是严格要求的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.