Javascript 检测XHR请求
我想在站点执行XHR请求时启动一个函数。 我花了整整一个晚上试图解决这个问题。 我尝试了许多在stackoverflow上发布的建议,但它似乎对我的用户脚本不起作用。所以我决定自己去问。希望你能帮忙 我想调用的函数使用了GM_setValue和GM_getValue,这也使得调用变得更加困难。 我还尝试了下面的函数和类似的函数,但它只在JavaScript控制台中使用时有效。当我将它与用户脚本一起使用时,它不再工作。。。 我也尝试过Waitfork,但这似乎对我不起作用。 setTimeout和setInterval实际上不是一个选项。 请帮忙。提前谢谢Javascript 检测XHR请求,javascript,jquery,xmlhttprequest,greasemonkey,userscripts,Javascript,Jquery,Xmlhttprequest,Greasemonkey,Userscripts,我想在站点执行XHR请求时启动一个函数。 我花了整整一个晚上试图解决这个问题。 我尝试了许多在stackoverflow上发布的建议,但它似乎对我的用户脚本不起作用。所以我决定自己去问。希望你能帮忙 我想调用的函数使用了GM_setValue和GM_getValue,这也使得调用变得更加困难。 我还尝试了下面的函数和类似的函数,但它只在JavaScript控制台中使用时有效。当我将它与用户脚本一起使用时,它不再工作。。。 我也尝试过Waitfork,但这似乎对我不起作用。 setTimeout和
var oldXHR = window.XMLHttpRequest;
function newXHR() {
var realXHR = new oldXHR();
realXHR.addEventListener("readystatechange", function() {
if(realXHR.readyState==4 && realXHR.status==200){
afterAjaxComplete() //run your code here
}
}, false);
return realXHR;
}
window.XMLHttpRequest = newXHR;
使用自定义方法覆盖默认的
XMLHttpRequest
方法,并捕获所需的事件:
var open = window.XMLHttpRequest.prototype.open,
send = window.XMLHttpRequest.prototype.send;
function openReplacement(method, url, async, user, password) {
this._url = url;
return open.apply(this, arguments);
}
function sendReplacement(data) {
if(this.onreadystatechange) {
this._onreadystatechange = this.onreadystatechange;
}
this.onreadystatechange = onReadyStateChangeReplacement;
return send.apply(this, arguments);
}
function onReadyStateChangeReplacement() {
//YOUR CODE FOR READYSTATECHANGE
if(this._onreadystatechange) {
return this._onreadystatechange.apply(this, arguments);
}
}
window.XMLHttpRequest.prototype.open = openReplacement;
window.XMLHttpRequest.prototype.send = sendReplacement;
更新:有关方法和示例的更多信息。谢谢!起初,这似乎是可行的,但遗憾的是,仍然存在一些问题。当有多个XHR请求时,我的函数只在第一个请求之后调用。(这不是什么大问题),而且它似乎没有检测到XHR请求后的页面更改。例如,我在函数中使用了这段代码:
document.documentElement.innerHTML.match(/xxx/g)
,但它没有检测到XHR请求添加的新匹配项。@Royalgamer06它在我的生产应用程序中工作得非常好。什么问题?抱歉,我在写完之前按了回车键。检查第一条评论。嗯,我前面提到的问题只适用于某些站点。您只需要使用以下代码一次,并附加自定义处理程序。