我试图做一些奇怪的事情。我正在开发一个机器人,它可以帮助您快速查明新Stack Overflow Documents站点上的剽窃行为。它是一个用户脚本。 User scipts have special JS functions。
机器人的意思是通过打开一个文档页面,以30个字块的形式阅读每个文档,打开Google标签,然后执行逐字搜索并将任何结果报告回SO标签,机器人可以帮助您编辑引用来源的文件,如果引用的内容太多,则标记它。
但是,当然,我不能以通常的方式在SO和Google标签之间进行通信(由于跨域政策)所以我走了一条奇怪的路线:我使用了特殊的GM功能GM_xmlhttpRequest来加载Google在SO标签中(GM_xmlhttpRequest
忽略相同的原始政策),将页面放在iframe中,然后从那里进行搜索。我认为这种方法可行,但有一个障碍:
问题在于,当您在Google iframe中执行搜索时,Google的搜索请求将从http://stackoverflow.com/
域发送,而不是Google.com。我可以在Google的代码中找到这些请求并将其更改为指定http://www.google.com
,但之后我们会再次遇到相同的原始政策限制。所以我想用XMLHttpRequest
替换窗口的GM_xmlhttpRequest
方法,我们可以很容易地做到这一点,但这两个函数的语法不同:
XMLHttpRequest
的工作原理如下:
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "http://www.example.org/example.txt");
oReq.send();
而GM_xmlhttpRequest
的工作原理如下:
GM_xmlhttpRequest({
method: "GET",
url: "https://www.google.com",
headers: {
"User-Agent": "Mozilla/5.0",
"Accept": "text/xml"
},
onload: function(response) {
}
});
我的问题是:
如何以这样的方式打包GM_xmlhttpRequest
以便用XMLHttpRequest
替换XMLHttpRequest
并使用div {
position: relative;
}
ul {
text-indent: .6em;
border-left: 1px solid red;
}
ul ul {
margin-top: -1.25em;
margin-left: 1em;
}
li {
position: relative;
bottom: -1.25em;
}
li:before {
content: "";
display: inline-block;
width: 2em;
height: 0;
position: relative;
left: -.75em;
border-top: 1px solid gray;
}
ul ul:before,
h3:before,
li:after {
content: '';
display: block;
width: 1em;
height: 1em;
position: absolute;
background: salmon;
border: 1px solid green;
top: 1em;
left: .4em;
}
h3 {
position: absolute;
top: -1em;
left: 1.75em;
}
h3:before {
left: -2.25em;
top: .5em;
}
的任何脚本继续工作?