2011-01-12 21 views
2

私はBHOからのページの変更を検出する方法を見つけようとしています。私はDomNodeInsertedを使っていますが、これはIEでは利用できません。私もonpropertychangeを使用して見てきましたが、これはあなただけの要素(子供ではない)を監視することができます。IE BHOからのajax呼び出しの監視

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をQIにしたいと思うと思います... –

+1

デザインモードに切り替えると、変更履歴はjavascriptを無効にします。 –