检测 XHR 请求
Detect XHR request
我想在站点发出 XHR 请求时触发一个函数。
我整晚都在试图解决这个问题。
而且我已经尝试了在 Whosebug 上发布的许多建议,但它似乎不适用于我的用户脚本。所以我决定自己问。希望你能帮到你。
我要调用的函数使用了GM_setValue和GM_getValue,所以也比较困难。
我也尝试了下面的功能和类似的功能,但它只在 JavaScript 控制台中使用时才有效。当我将它与用户脚本一起使用时,它不再起作用了......
我也尝试过 waitForKeyElements,但这似乎对我不起作用。
而 setTimeout 和 setInterval 并不是一个真正的选择。
请帮忙。提前致谢!
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;
更新:read this post获取有关方法和示例的更多信息。
我想在站点发出 XHR 请求时触发一个函数。 我整晚都在试图解决这个问题。 而且我已经尝试了在 Whosebug 上发布的许多建议,但它似乎不适用于我的用户脚本。所以我决定自己问。希望你能帮到你。
我要调用的函数使用了GM_setValue和GM_getValue,所以也比较困难。 我也尝试了下面的功能和类似的功能,但它只在 JavaScript 控制台中使用时才有效。当我将它与用户脚本一起使用时,它不再起作用了...... 我也尝试过 waitForKeyElements,但这似乎对我不起作用。 而 setTimeout 和 setInterval 并不是一个真正的选择。 请帮忙。提前致谢!
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;
更新:read this post获取有关方法和示例的更多信息。