我会尽力解释我的问题,但是老实说,我有点困惑,所以我无法想象这对你们会容易得多。
正确,我正在为我经常访问的网站的用户脚本创建脚本。我想做的是劫持任何ajax请求,我做得很好,然后修改responseText。
我似乎无法写出responseText,我可以很好地阅读它,并且它可以很好地显示响应,但是无论我如何尝试,我都无法更改其值。
我在控制台中没有看到任何错误,我在代码中留下了注释以显示要记录的内容。
我只是想把它报废,但了解我,我已经错过了一些显而易见的事情,只是看不见。
提前致谢。
(function(send) {
XMLHttpRequest.prototype.send = function(data) {
this.addEventListener('readystatechange', function() {
if(typeof data == 'string'){
if(data.indexOf('room.details_1') > -1){
if(this.readyState == 4 && this.status == 200){
console.log('Before: ' + JSON.parse(this.responseText).body.user.profile.username); // Shows NameNumber1
var temp = JSON.parse(this.responseText);
temp.body.user.profile.username = 'NameNumber2';
this.responseText = JSON.stringify(temp);
console.log('Temp: ' + temp.body.user.profile.username); // Shows NameNumber2
console.log('After: ' + JSON.parse(this.responseText).body.user.profile.username); // Shows NameNumber1 <-- This is the problem.
console.log(this); // Shows the XMLHttpRequest object, with the original responseText rather than the modified one.
}
}
}
}, false);
send.call(this, data);
};
})(XMLHttpRequest.prototype.send);
最佳答案
XMLHttpRequest.responseText
是只读的。这意味着没有设置器,因此您无法修改其值。除了替代XMLHttpRequest
本身,没有其他解决方法。
Specification
编辑
测试使用Object.defineProperty
覆盖responseText
的建议:
var xhr = new XMLHttpRequest();
Object.defineProperty( xhr, "responseText", { value: "test" });
xhr.responseText // returns ""
所以这也不行
关于javascript - 覆盖XMLHttpRequest.responseText,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23901337/