Если вы чувствуете себя достаточно безопасно, вы определенно можете войти в этот код (он совсем не длинный) и добавить некоторую логику в раздел onreadystatechange. Это событие вызывается после завершения вызова Ajax. Если вы подключитесь к нему, вы можете легко добавить что-то, чтобы поговорить с вашим кодом.
Другой способ - перехватить XMLHttpRequest
, чтобы при вызове метода send()
вы подключали собственный прослушиватель событий, который отслеживает этот запрос на событие load. Как только запрос сделан, вы можете вызывать ваши пользовательские функции. Это можно сделать так:
XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
this.addEventListener('load',function(){
//CALL YOUR CODE HERE
},false);
this.originalSend(s);
}
Или вместо этого вы можете взломать функцию onreadystatechange, чтобы добавить свою собственную логику:
XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
if(this.onreadystatechange){
var oldORSC=this.onreadystatechange;
}
this.onreadystatechange=function(){
if (this.readyState==4 && this.status==200){ //a successful request
//CALL YOUR CODE HERE
}
if(oldORSC){
oldORSC();
}
}
this.originalSend(s);
}
Конечно, если вы хотите поддерживать IE, вам придется делать аналогичные вещи с ActiveXObject, который они используют для AJAX. Но я им не пользуюсь, поэтому не могу привести примеры.
РЕДАКТИРОВАТЬ: это предполагает, что ваша страница делает звонки только для этой цели. Если у вас есть другие вызовы AJAX, вам нужно будет добавить логику, чтобы определить, какой вызов используется. Для этого вы можете подключиться к методу open()
и проверить URL-адрес или параметры или любую другую конкретную информацию, которая поможет вам определить, куда идет вызов, а затем соответствующим образом изменить запрос.
ТАКЖЕ: убедитесь, что эти угонщики называются ПЕРВЫМИ, прежде чем любой другой javascript.