我正在尝试将回调注入XMLHttpRequest.prototype.open()
,以便我可以知道方法和网址,以及为效果报告设置时间戳(单独使用修改后的XMLHttpRequest.prototype.send()
)。
这是我到目前为止所得到的:
function addXMLRequestCallback(open, callback) {
var nativeOpen, nativeSend, i;
if (XMLHttpRequest.callbacks) {
XMLHttpRequest.callbacks.push(callback);
} else {
XMLHttpRequest.callbacks = [callback];
nativeOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
open.forEach(function(item) {
// not sure what to do here...
});
}
nativeSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
for (i = 0; i < XMLHttpRequest.callbacks.length; i++) {
XMLHttpRequest.callbacks[i](this);
}
nativeSend.apply(this, arguments);
}
}
}
addXMLRequestCallback(function(method,url){
// Maybe instead I should put code here...
}, function(xhr) {
// then do something here?
});
答案 0 :(得分:0)
您使用send
方法所采用的方法是正确的。在下面的代码片段中,我只调用了一个在调用XMLHttpRequest
的{{1}}方法时调用的侦听器。我相信你可以为open
实现相同的功能。
send
但是,问问自己是否真的需要修改内置原型。考虑创建一个执行相同操作但不修改原型的包装类。