欺骗 xmlhttprequest (greasemonkey)
Spoofing xmlhttprequest (greasemonkey)
我正在阻止来自 greasemonkey 的 XMLHttpRequest,但是页面在没有响应时出现错误。所以我尝试欺骗,就好像收到了回复一样。不幸的是,XMLHttpRequest 似乎有只读字段。所以我创建了一个假对象:
fakeresponse = "for (;;);"+JSON.stringify(fakeresponse);
var xhr2 = {};
xhr2.readyState = 0;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.readyState = 1;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.readyState = 2;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.readyState = 3;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.response = fakeresponse;
xhr2.responseText = fakeresponse;
xhr2.responseXML = fakeresponse;
xhr2.status = 200;
xhr2.readyState = 4;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
对象是:
Object {response: "for (;;);{"__ar":1,"payload":{"actions":[{"..."},"bootloadable":{},"ixData":{},"lid":"0"}", responseText: "for (;;);...", responseXML: "for (;;);....", status: 200, readyState: 4}
但什么也没有发生..有没有其他方法可以模拟这个,或者我是否必须深入使用调试器?该页面还使用库而不是纯 xhr 对象,这会成为问题吗?
(function(xhr, value){
Object.defineProperty(xhr, "response", {
get: function() {
return value;
}
});
Object.defineProperty(xhr, "responseText", {
get: function() {
return value;
}
});
Object.defineProperty(xhr, "responseXML", {
get: function() {
return value;
}
});
Object.defineProperty(xhr, "status", {
get: function() {
return 200;
}
});
})(xhr, fakeresponse);
Object.defineProperty(xhr, "readyState", {
get: function() {
return 4;
}
});
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange();
我正在阻止来自 greasemonkey 的 XMLHttpRequest,但是页面在没有响应时出现错误。所以我尝试欺骗,就好像收到了回复一样。不幸的是,XMLHttpRequest 似乎有只读字段。所以我创建了一个假对象:
fakeresponse = "for (;;);"+JSON.stringify(fakeresponse);
var xhr2 = {};
xhr2.readyState = 0;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.readyState = 1;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.readyState = 2;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.readyState = 3;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
xhr2.response = fakeresponse;
xhr2.responseText = fakeresponse;
xhr2.responseXML = fakeresponse;
xhr2.status = 200;
xhr2.readyState = 4;
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange.call(xhr2);
对象是:
Object {response: "for (;;);{"__ar":1,"payload":{"actions":[{"..."},"bootloadable":{},"ixData":{},"lid":"0"}", responseText: "for (;;);...", responseXML: "for (;;);....", status: 200, readyState: 4}
但什么也没有发生..有没有其他方法可以模拟这个,或者我是否必须深入使用调试器?该页面还使用库而不是纯 xhr 对象,这会成为问题吗?
(function(xhr, value){
Object.defineProperty(xhr, "response", {
get: function() {
return value;
}
});
Object.defineProperty(xhr, "responseText", {
get: function() {
return value;
}
});
Object.defineProperty(xhr, "responseXML", {
get: function() {
return value;
}
});
Object.defineProperty(xhr, "status", {
get: function() {
return 200;
}
});
})(xhr, fakeresponse);
Object.defineProperty(xhr, "readyState", {
get: function() {
return 4;
}
});
if(xhr.onreadystatechange!==undefined) xhr.onreadystatechange();