2

Я пытаюсь найти способ обнаружения изменений на странице из BHO. Для версии Firefox плагина я использую DomNodeInserted, но это не доступно в IE. Я также посмотрел на использование onpropertychange, но это позволяет контролировать только один элемент (а не дочерние элементы).Мониторинг вызовов ajax от IE BHO

Теперь мне интересно, можно ли отслеживать, когда вызываются запросы AJAX. Если это так, я могу внести изменения на страницу после завершения запроса AJAX. Проблема только в том, что я не могу найти способ сделать это.


Вот моя попытка до сих пор, на основе предложений jeffamaphone, он не работает, но, возможно, это будет подталкивать кого-то память.

public class ChangeMonitor : IHTMLChangeSink { 
     public void Notify() 
     { 
      Trace.WriteLine("notified"); 
     } 
    } 

    void registerMonitor() 
    { 
     HTMLDocument document = _webBrowser2.Document; 

     ChangeMonitor monitor = new ChangeMonitor(); 
     IHTMLChangeSink changeSink = monitor; 
     IHTMLChangeLog changeLog = null; 

     ((IMarkupContainer2)document).CreateChangeLog(changeSink, out changeLog, 1, 1); 
    } 

ответ

1

Для IE onreadystatechange будет работать как эквивалент DomNodeInserted. Поведение DHTML должен быть присоединен к элементу через HTC, но HTC файл не должен существовать:

document.documentElement.addBehavior("foo.htc"); 
document.documentElement.attachEvent("onreadystatechange", Notify); 

BHO can inject the script для обработки события.

0

Я никогда не делал этого, но моя теория вы можете использовать IMarkupContainer2::CreateChangeLog().

+0

Это выглядит интересно, я не могу разобраться, как его создать. Является ли это зарегистрированным через IWebBrowser2 каким-то образом? – opsb

+1

Я думаю, вы хотите, чтобы QI IHTMLDocument для него ... –

+1

журнал изменений работает только при переключении в режим разработки, что, в свою очередь, отключает javascript. –

Смежные вопросы