2016-10-14 43 views
0

我有一个简单的HTML页面的iframe事件侦听器,以等待所有XMLHttpRequest的内部的iframe

<html> 
<head> 
$('#page-wrapper').ajaxStop(function() { 
    console.log("Page Loaded Completely."); 
}); 
</head> 
<body> 
    <h3>Demo page<h3> 
    <iframe id="page-wrapper" src="#company/profile"></iframe> 
</body> 

我希望每一个XMLHttpRequest的后执行一段Java脚本的是完整的页面内部iframe。我找到了一种方法来等待所有使用ajaxStop的ajax请求,但是控制台消息打印得非常早,并且不会等待甚至完成一个ajax请求。

文档准备好或加载也不能在这里工作,因为页面没有用单个html文件回复,它更像是一个单独的页面应用程序,其中很早就可以使用dom,然后请求大量的资源文件,在页面最终完成之前,有40-50个Ajax请求。

我正在寻找类似于Chrome开发工具 - >网络标签,并在过滤器中键入“is:running”,您将只能获得待处理的请求。有些东西可以给我活动请求的数量。

Chrome Dev tool

回答

0

jQuery的ajaxStop是一个全球性的事件处理程序,并应连接到document水平。

jQuery的$.ajax引发这些事件的内部每当$.ajax是用来做一个XMLHttpRequest和事件绑定on()所以他们应该泡沫,但可能只到最近的文件/窗口的水平,这将是对的contentWindow iframe中。

你需要做的是大概就像

$(function() { 
    $('#page-wrapper').on('load', function() { 
     var win = iframe.contentWindow || iframe; 
     var doc = iframe.contentDocument || iframe.contentWindow.document; 

     $(doc).ajaxStop(function() { 
      // catch ajax in iframe 
     }); 
    }); 
}); 

这并不当然需要的iframe是来自同一产地,并且不阻止的同源策略。

+0

谢谢adeneo,ajaxStop在一开始仍然被称为。 当我在'ajaxStop'中放置一个断点时,'$ .active'为零,但是当我在'company/profile'页面内的一个随机javascript函数中放置一个断点时,'$ .active'具有非零值。所以有jQuery运行的两个实例,第一个在页面上,第二个在iframe中,我需要在iframe页面中添加ajaxStop,一旦被调用,我需要引发一个父页面正在渲染的事件,发布内容。 – Habib