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

标签 javascript ajax proxy intercept

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

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

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

最佳答案

您打算如何拦截 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 对象。

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

即便如此,您也永远无法确定您注入(inject)的脚本会在 AJAX 请求之前、之后或期间执行。您能做的最好的事情就是检查请求的 readyState,如果为时已晚,就直接放弃。

如果您尝试发起 XSS 攻击,拦截 AJAX 响应绝对不可行。干杯。

关于javascript - 在浏览器中使用 javascript 拦截 ajax 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859356/

相关文章:

javascript - 在 CodeIgniter 中使用 Ajax 上传文件,但 Jquery 不起作用

c# - Azure 代理,请求 IIS 托管 API 时出现 CORS 错误

javascript - Node http-proxy-middleware 不能将本地服务器作为目标

javascript - 在 JavaScript 中隐藏/显示元素

javascript - 当我的名称为字符串时如何执行 Angular Controller 方法

Javascript 自动完成与 ajax 调用顺序

javascript - jQuery Select2 没有在任何地方关闭(也不在他们自己的网站上)

java - BrowserMob 代理和 Selenium 的问题

java - 从 JavaScript 检索数据的简单方法

javascript - 将请求从 https 发送到 chrome 扩展的 http