我是ajax的新手,需要一些帮助来理解javascript在浏览器中的运行方式。我试图解决的问题是使用第二个javascript拦截ajax响应(注入此页面)。
当用户首次加载页面时,我通过附加我自己的javascript来修改服务器响应(通过代理)。稍后在正常操作期间,用户尝试通过此页面获取一些内容,我希望能够在使用注入的javascript包含特定的http标头或内容并显示弹出窗口时拦截此响应。
这甚至可行吗?我检查了其他相关问题,发现这可以使用浏览器扩展(内容脚本等)完成,但我想知道是否可以在页面本身使用javascript注入。
答案 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响应绝对不可行。欢呼声。