![](/img/trans.png)
[英]How can I provide a limited interface to Greasemonkey's GM_xmlhttpRequest to my page's Javascript?
[英]I can't figure out why the URL won't change for my GM_xmlhttpRequest in my Greasemonkey script
我遇到了一个非常令人沮丧的问题,希望有人可以帮助我。 这是我的Greasemonkey脚本的一部分,我不明白为什么异步请求总是发送到相同的URL。
function parse(details) {
var element = $(details);
var coll = element.find("#my valid selector");
$.each(coll, function(index, href) {
SendData(href);
});
}
function SendData(url) {
GM_xmlhttpRequest ({
method: 'GET',
url: url,
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
'Accept': 'application/atom+xml,application/xml,text/xml',
},
onload: function(responseDetails) {
doSomething(responseDetails.responseText);
}
});
}
当我启动Fiddler时,无论集合中有多少物品,我都可以看到它发出了相同的请求。 无论第一个链接是什么,所有请求都将发送到该链接。 我已经验证过parse方法每次都成功地将一个不同的链接传递给SendData函数,但始终对集合中的第一个URL发出请求。
我以为我的东西与在这里找到的东西相似,但是也许我缺少了一些东西。 任何帮助,将不胜感激。
似乎url
并未在闭包中捕获,因此除了第一次运行GM_xmlhttpRequest
,所有url
均未定义。
修改SendData()
,如下所示:
function SendData(url)
{
var moreSubstantial = url + " ";
GM_xmlhttpRequest(
{
method: 'GET',
url: moreSubstantial,
应该足够了。
或者,您可以按顺序获取页面。 将parse()
更改为:
function parse (details)
{
var element = $(details);
var coll = element.find("#my valid selector");
var TargetPages = coll.map (function() {return this.href;} );
(function getNextPage (J)
{
var PageURL = TargetPages[J];
GM_xmlhttpRequest
( {
method: "GET",
url: PageURL,
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
'Accept': 'application/atom+xml,application/xml,text/xml',
},
onload: function (responseDetails)
{
doSomething (responseDetails.responseText);
if (--J >= 0)
getNextPage (J);
}
} );
} ) (TargetPages.length - 1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.