Я пытаюсь добавить некоторый код к методу объекта XMLHttpRequest, но что-то не работает. Соответствующий код:
XMLHttpRequest.prototype.oldOpen = XMLHttpRequest.prototype.open;
var newOpen = function(method, url, async, user, password) {
alert( "[debug info]" );
this.oldOpen(method, url, async, user, password);
}
XMLHttpRequest.prototype.open = newOpen;
Когда вызывается open (), оповещение отключается, но исходная функция не вызывается. Почему это?
Для справки: это часть скрипта GreaseMonkey, которая должна прослушивать трафик XHR. Полный скрипт выглядит следующим образом:
var XMLHttpRequest = unsafeWindow.XMLHttpRequest;
var startTracing = function () {
XMLHttpRequest.prototype.uniqueID = function() {
// each XMLHttpRequest gets assigned a unique ID and memorizes it
// in the "uniqueIDMemo" property
if (!this.uniqueIDMemo) {
this.uniqueIDMemo = Math.floor(Math.random() * 1000);
}
return this.uniqueIDMemo;
}
// backup original "open" function reference
XMLHttpRequest.prototype.oldOpen = XMLHttpRequest.prototype.open;
var oOpen = XMLHttpRequest.prototype.open;
var newOpen = function(method, url, async, user, password) {
alert("open: " + method + "," + url + "," + async + "," + user + "," + password );
this.oldOpen(method, url, async, user, password);
}
XMLHttpRequest.prototype.open = newOpen;
}
startTracing();