我怎样才能重写 XMLHttpRequest.open()
方法,然后捕获并更改它的参数?
我已经尝试过代理方法,但它没有用,尽管在调用 XMLHttpRequest()
时删除了 open 覆盖:
(function() {
var proxied = window.XMLHttpRequest.open;
window.XMLHttpRequest.open = function() {
$('.log').html(arguments[0]);
return proxied.apply(this, arguments);
};
})();
最佳答案
您没有修改XMLHttpRequest 对象
继承的open
方法,而只是向XMLHttpRequest 构造函数
添加了一个实际上从未使用过的方法。
我在 facebook 上试过这段代码,我能够捕捉到请求:
(function() {
var proxied = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
console.log( arguments );
return proxied.apply(this, [].slice.call(arguments));
};
})();
/*
["POST", "/ajax/chat/buddy_list.php?__a=1", true]
["POST", "/ajax/apps/usage_update.php?__a=1", true]
["POST", "/ajax/chat/buddy_list.php?__a=1", true]
["POST", "/ajax/canvas_ticker.php?__a=1", true]
["POST", "/ajax/canvas_ticker.php?__a=1", true]
["POST", "/ajax/chat/buddy_list.php?__a=1", true]
*/
是的,需要将 open 方法添加到 XMLHttpRequest 原型(prototype)
(window.XMLHttpRequest.prototype) 而不是 XMLHttpRequest constructor
(window.XMLHttpRequest)
关于Javascript:重写 XMLHttpRequest.open(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775767/