2015-02-08 21 views
0

通過在C#中使用GeckoWebBrowser有無論如何知道一個頁面何時完成使用XMLHttpRequest更新其內容?我認爲DocumentCompleted事件會做到這一點,但因爲它不會重新加載的頁面不會啓動...使用XMLHttpRequest更改其內容的頁面的適當事件偵聽器是什麼?

+0

* 「......當一個頁面已經完成更新使用XMLHttpRequest的內容......」 *'XMLHttpRequest'沒有按不要修改網頁。響應XHR請求的完成,JavaScript代碼可能會響應。 – 2015-02-08 19:00:18

回答

1

您可以使用mutation observerdocument.body的子樹,並假定頁面已完成修改(說)最後一次通知後20ms。

在JavaScript中,這將是這個樣子:

(function() { 
 
    var observer; 
 

 
    // The click handler that appends content after a random delay 
 
    document.querySelector('input').addEventListener("click", function() { 
 
    if (!observer) { 
 
     hookupObserver(); 
 
    } 
 
    setTimeout(function() { 
 
     var p = document.createElement('p'); 
 
     p.innerHTML = "New content added at " + Date.now(); 
 
     document.querySelector('div').appendChild(p); 
 
    }, 500 + Math.round(Math.random() * 500)); 
 
    }, false); 
 
    
 
    // Watching for subtree mods to `document.body`: 
 
    function hookupObserver() { 
 
    var timer = 0; 
 
    observer = new MutationObserver(function() { 
 
     clearTimeout(timer); 
 
     timer = setTimeout(done, 40); 
 
    }); 
 
    observer.observe(document.body, {childList: true, subtree: true}); 
 
    } 
 
    
 
    function done() { 
 
    timer = 0; 
 
    alert("Modification complete"); 
 
    } 
 
})();
<input type="button" value="Click to simulate async modification"> 
 
<div>This is the page</div>

+0

這只是完美的...感謝您的快速回答! – 2015-02-08 19:21:36

+0

@MarcoDufal - 注意:'MutationObserver'需要IE11或更高版本。 – jfriend00 2015-02-08 19:33:05

+0

@ jfriend00:他在C#中使用GeckoWebBrowser。 (但在IE9和IE10中,有些項目使用--gh - 突變事件來模擬MutationObserver ...) – 2015-02-09 08:17:05

相關問題