2015-06-28 4 views
0

Я блокирую XMLHttpRequest из greasemonkey, но ошибки страницы, когда он не получает ответа. Поэтому я попытался подделать, как будто получен ответ. Unforunetly кажется, что XMLHttpRequest имеет поля только для чтения. Таким образом, я создал поддельный объект:Spoofing xmlhttprequest (greasemonkey)

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, может ли это быть проблемой?

ответ

0
(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();