JavaScript:如何拦截来自iframe的http请求

时间:2013-03-03 10:51:58

标签: javascript

我以编程方式在我的网页中设置iframe的网址。 我必须知道从这个URL更改触发了哪些http请求(用于css,脚本,图像等的URL加载)。 我拦截了XMLHttpRequest,但这个对象从未被调用过......

如何拦截这些http请求?

是否有其他方法可以“加载”iframe并获取所有已触发的网址请求?

这是我的代码:

(function(xhr){
  var pt = xhr.prototype;
  pt._open = pt.open;
  pt.open = function(){
   console.log('Open called...');
   this._open.apply(this, arguments);
})(XMLHttpRequest);
...
$('#iframe').attr('src', 'http://www.stackoverflow.com');

1 个答案:

答案 0 :(得分:1)

<iframe />与父窗口的window不同,因此,当您覆盖XMLHttpRequest时,您将覆盖父窗口中的那个 < em> not <iframe />窗口中的那个。

不幸的是,相同的原始政策会阻止您访问window的{​​{1}},因此您无法做到这一点。

即使SOP没有在这里发挥作用,当你可以拦截AJAX请求时,你也无法拦截资产请求(CSS,JS,图像)。

您最好的选择是在您的服务器上使用代理,并通过那里路由iframe请求;通过代理重写所有资产URL而不是直接访问(但即使这样,您也有可能无法跟踪的边缘情况,例如JavaScript包括其他资产等等。