Каков подходящий приемник событий для страницы, которая изменяет свое содержимое с помощью XMLHttpRequest?
Используя GeckoWebBrowser в C#, есть ли возможность узнать, когда страница завершила обновление содержимого с помощью XMLHttpRequest? Я думал, что событие DocumentCompleted сделало бы это, но поскольку страница не перезагружается, она не запустится...
1 ответ
Решение
Вы могли бы использовать наблюдение наблюдателя мутации document.body
поддерево, и предположим, что страница была изменена (скажем) через 20 мс после последнего полученного вами уведомления.
В 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>