2011-01-12 48 views
2

我試圖找到一種方法來檢測BHO頁面上的更改。對於Firefox版本的插件,我使用的是DomNodeInserted,但這在IE中不可用。我也看過使用onpropertychange,但這隻允許您監視一個元素(而不是子元素)。監視來自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 2011-01-12 18:41:34