Javascript:重写 XMLHttpRequest.open()

标签 javascript ajax xmlhttprequest overriding

我怎样才能重写 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/

相关文章:

javascript - 如何用 HOC 包装每个导出的组件?

javascript - xmlhttprequest - 异常 101 错误

javascript - 列出在匿名函数中创建的变量

javascript - 我正在尝试使用 vanilla JS 突出显示单击的 anchor 并删除先前突出显示的 anchor

javascript - JSON/JQUERY - ajax post,如何在成功函数中处理 XML 数据

javascript - JQuery 未发送 Ajax 请求

javascript - 为什么 Internet Explorer 在 Ajax 调用失败后不发送 HTTP post 正文?

javascript - 读取本地 XML 文件进行解析

vba - XMLHTTP 和 ServerXMLHTTP 之间的差异

javascript - cms 使如何在我的模板中包含 javascript 变得简单