2016-10-14 103 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