1

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

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

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

4

1 回答 1

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 响应肯定是不可行的。干杯。

于 2012-06-02T02:53:09.533 回答