gpt4 book ai didi

javascript - 检索和修改 XMLHttpRequest 的内容

转载 作者:数据小太阳 更新时间:2023-10-29 04:34:07 26 4
gpt4 key购买 nike

我正在为 Firefox、Safari、Chrome 开发一个浏览器插件,它将拦截页面上的数据,针对正则表达式运行它,然后如果它匹配 - 重新格式化它。我使用以下方法处理页面加载:

var meth = {
replaceInElement : function(element, find, replace) {
// iterate over child nodes and replace
},
run : function(evt){
// doc is the document that triggered "run" event
if (!(evt.target.nodeName === "#document")) { return; }
var doc = evt.target; // document that triggered "onload" event
if (!(doc instanceof HTMLDocument)) { return; }
if (!doc.location) { return; }

// perform substitutions on the loaded document
var find = /regex/gi

meth.replaceInElement(doc.body, find, function(match) {
var new_content;
//do stuff
return new_content;
});

//content.document.addEventListener('DOMNodeInserted', ezcall.node_inserted, false);
}
}

window.addEventListener("load", meth.run, false);

这适用于静态页面,但对于任何使用 ajax 调用的东西,它都会失败。我找不到合适的监听器或弄清楚如何拦截 XMLHttpRequest。

我已经为 XMLHttpRequest 尝试过类似的事件监听器,但没有成功。

XMLHttpRequest.addEventListener('load', meth.run, false);

我想拦截请求并修改内容。或者在 ajax 调用完成后找到更新的目标并扫描它。

更新:

我会接受说无法完成的答案,但我需要一些支持数据来说明为什么无法完成。

最佳答案

相当脏,但您可以覆盖 XMLHttpRequest.prototype.open。这是一个 Demo 页面。由于您正在编写扩展,因此您必须 put this code in page context :

(function() {
// save reference to the native method
var oldOpen = XMLHttpRequest.prototype.open;
// overwrite open with our own function
XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
// intercept readyState changes
this.addEventListener("readystatechange", function() {
// your code goes here...
console.log("Interception :) " + this.readyState);
}, false);
// finally call the original open method
oldOpen.call(this, method, url, async, user, pass);
};
})();

在这之后你可以做任何我想的事情。替换instance.readystatechange,替换instance.addEventListener,或者监听突变事件(虽然是deprecated)。

关于javascript - 检索和修改 XMLHttpRequest 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com