Каков подходящий приемник событий для страницы, которая изменяет свое содержимое с помощью 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>

Другие вопросы по тегам