【问题标题】:javascript ajax interceptionjavascript ajax 拦截
【发布时间】:2012-12-04 17:44:28
【问题描述】:

我正在使用以下 javascript 代码来拦截 ajax 调用:

XMLHttpRequest.prototype.realOpen = XMLHttpRequest.prototype.open;
var newOpen = function(method, url, async, user, password) {
    console.log("Intercepted open (" + url + ")");
    this.realOpen(method, url, async, user, password);
}
XMLHttpRequest.prototype.open = newOpen;

执行 ajax 调用的 javascript 和上面的代码加载自:
https://example.com/js/main.js
https://example.com/js/intercept.js

当 ajax 调用的域只是“example.com”时,上面的代码运行良好,但是当对域“sub.example.com”进行 ajax 调用时,上面的代码无法拦截该请求。

有人知道为什么它不起作用吗?

【问题讨论】:

  • “不工作”是什么意思,是跨域请求,这样做应该有异常。
  • 不,控制台上没有错误/异常。 “不起作用”是指“sub.example.com”的ajax请求没有被拦截,我没有看到它的console.log条目。我知道肯定会请求它,因为我正在通过 Fiddler 代理所有浏览器流量。
  • CORS 由两个请求组成,首先检查另一个页面是否允许来自当前域的请求,然后在第二个中发送实际请求。所以如果你只看到一个,那就有问题了。

标签: javascript ajax xmlhttprequest intercept


【解决方案1】:

您似乎是same origin policy 的受害者,因为 example.com 和 sub.example.com 被视为两个不同的域。

【讨论】:

  • 我明白了,所以如果我添加一个具有相同脚本的 iframe,并将 iframe 的 document.domain 设置为“sub.example.com”,那么它会起作用吗?
  • 是的,但是您必须弄清楚如何在主窗口和 iframe 之间进行通信(使用跨域消息传递等技术)。此外,CORS 或 JSONP 等技术绕过了跨域问题,但并非所有浏览器或服务器都支持它们。
猜你喜欢
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2014-04-01
  • 1970-01-01
相关资源
最近更新 更多