JavaScript的:重写XMLHtt prequest.open() [英] Javascript: Overriding XMLHttpRequest.open()

查看:410
本文介绍了JavaScript的:重写XMLHtt prequest.open()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将能够覆盖 XMLHtt prequest.open()方法,然后抓住并改变它的参数?

我已经试过了代理方法,但它没有工作,虽然除去开过摆脱当 XMLHtt prequest()被称为:

 (函数(){
    VAR代理= window.XMLHtt prequest.open;
    window.XMLHtt prequest.open =功能(){
        $('登录')HTML(参数[0]);
        返回proxied.apply(这一点,参数);
    };
})();
 

解决方案

您不能修改继承了打开方法 XMLHtt prequest对象只是添加一个方法到 XMLHtt prequest构造这实际上是从来没有使用过。

我想这code在Facebook和我能赶上要求:

 (函数(){
    VAR代理= window.XMLHtt prequest.prototype.open;
    window.XMLHtt prequest.prototype.open =功能(){
        执行console.log(参数);
        返回proxied.apply(这一点,[] .slice.call(参数));
    };
})();

/ *
    [POST,/ajax/chat/buddy_list.php?__a=1,真]
    [POST,/ajax/apps/usage_update.php?__a=1,真]
    [POST,/ajax/chat/buddy_list.php?__a=1,真]
    [POST,/ajax/canvas_ticker.php?__a=1,真]
    [POST,/ajax/canvas_ticker.php?__a=1,真]
    [POST,/ajax/chat/buddy_list.php?__a=1,真]
* /
 

所以是开放的方法需要被添加到 XMLHtt prequest原型(window.XMLHtt prequest.prototype)没有 XMLHtt prequest构造(window.XMLHtt prequest)

How would I be able to override the XMLHttpRequest.open() method and then catch and alter it's arguments?

I've already tried the proxy method but it didn't work, although removing the open over-rid when XMLHttpRequest() was called:

(function() {
    var proxied = window.XMLHttpRequest.open;
    window.XMLHttpRequest.open = function() {
        $('.log').html(arguments[0]);
        return proxied.apply(this, arguments);
    };
})();

解决方案

You are not modifying the open method inherited by XMLHttpRequest objects but just adding a method to the XMLHttpRequest constructor which is actually never used.

I tried this code in facebook and I was able to catch the requests:

(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]
*/

So yeah the open method needs to be added to XMLHttpRequest prototype (window.XMLHttpRequest.prototype) not XMLHttpRequest constructor (window.XMLHttpRequest)

这篇关于JavaScript的:重写XMLHtt prequest.open()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆