我是 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/