在浏览器中使用javascript拦截ajax响应

时间:2012-06-02 02:30:20

标签: javascript ajax proxy intercept

我是ajax的新手,需要一些帮助来理解javascript在浏览器中的运行方式。我试图解决的问题是使用第二个javascript拦截ajax响应(注入此页面)。

当用户首次加载页面时,我通过附加我自己的javascript来修改服务器响应(通过代理)。稍后在正常操作期间,用户尝试通过此页面获取一些内容,我希望能够在使用注入的javascript包含特定的http标头或内容并显示弹出窗口时拦截此响应。

这甚至可行吗?我检查了其他相关问题,发现这可以使用浏览器扩展(内容脚本等)完成,但我想知道是否可以在页面本身使用javascript注入。

1 个答案:

答案 0 :(得分:3)

您打算如何拦截AJAX响应?我认为可以使用JavaScript的唯一方法是,您可以访问原始的XMLHttpRequest对象。考虑:

var request = new XMLHttpRequest;
request.onreadystatechange = handler;
request.open("GET", "/somefile.php", true);
request.send();

function handler() {
    if (request.readyState == 4 && request.status == 200) {
        // do something
    }
}

现在要拦截这个AJAX响应,你需要覆盖request.onreadystatechange事件处理程序,为此你需要访问request对象。

由于您尝试使用注入的脚本拦截响应,因此您的脚本只能访问全局变量,这意味着如果request对象是全局变量,您将只能拦截AJAX响应变量

即便如此,您仍然无法确定您注入的脚本将在AJAX请求之前,之后或期间执行。你能做的最好的事情就是检查请求的readyState,如果为时已晚,就放弃。

如果您尝试启动XSS攻击,拦截AJAX响应绝对不可行。欢呼声。