2011-01-12 90 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