2012-02-02 21 views
10

私はWPFのWebBrowserコントロールを使って簡単なWebページを読み込んでいます。このページにはアンカーまたはボタンがあります。私はそのボタンのクリック事象をアプリケーションのコードの中で(つまりC#で)捕捉したいと思います。Webブラウザコントロール:ドキュメントイベントをキャプチャする方法は?

WebBrowserコントロールが、ロードされたページの要素のクリックイベントをキャプチャする方法はありますか?

さらに、ページとWebBrowserの間でイベントトリガーされたデータを通信することは可能ですか?上記のすべてが可能なはずですか?

  • 編集:考えられる解決策:

私は解決策になるかもしれない次のリンクを発見しました。私はまだそれをテストしていないが、それはショットの価値がある。テスト結果によってこの質問が更新されます。

http://support.microsoft.com/kb/312777

  • リンクから撮影:Source

答えて

13

た[OK]を回答 - テストし、それが動作:

  • と呼ばれるCOM]タブから参照を追加します。のMicrosoft HTMLオブジェクトをライブラリ

次は、サンプルコードです:

次の2つのコンポーネントが必要になります:WebBrowserコントロール(webBrowser1)。ここでテキストボックス(textBox1テキストボックス)

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     webBrowser1.LoadCompleted += new LoadCompletedEventHandler(webBrowser1_LoadCompleted); 
    } 

    private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     mshtml.HTMLDocument doc; 
     doc = (mshtml.HTMLDocument)webBrowser1.Document; 
     mshtml.HTMLDocumentEvents2_Event iEvent; 
     iEvent = (mshtml.HTMLDocumentEvents2_Event)doc; 
     iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler); 
    } 

    private bool ClickEventHandler(mshtml.IHTMLEventObj e) 
    { 
     textBox1.Text = "Item Clicked"; 
     return true; 
    } 
} 
+1

他の回答はありませんでしたので、回答として選択します。私はこの問題を解決する良い方法を見つけましたが。この方法はhttp://www.codegain.com/articles/wpf/ieprogramming/working-with-webbrowser-in-wpf.aspxに記述されており、ObjectForScriptingHelperというクラスを使用しています。非常に簡単に実装し、魅力的に動作します。 – Bassem

+1

それは、私が見ることができる例外なしで完全にLoadCompletedメソッドが完了しても、それは "ClickEventHandler"を呼び出すに失敗したほとんどの時間、私にとって時間の20%だけ働くようです...任意のアイデア?私はここでそれについて投稿:http://stackoverflow.com/questions/35058874/wpf-webbrowser-open-links-in-default-browser –

+1

@Bassemによって参照codegainの記事は今ここで見つけることができます。http:// WWW .dotnetfunda.com/articles/show/840/working-with-webbrowser-in-wpf –

2

は別の例です。

私は以下のコードは正常に動作します。.. jQuery.getScript(url, callback)と本質的に同じ考え方、リモートのJavaScriptファイルを注入したときにヘッダにDOM要素<script src="{path to remote file}" />を追加して準備ができていくつかのコードを実行する

をしようとしていました。

HtmlElementCollection head = browser.Document.GetElementsByTagName("head"); 
if (head != null) 
{ 
    HtmlElement scriptEl = browser.Document.CreateElement("script"); 
    IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; 
    element.src = url; 
    element.type = "text/javascript"; 
    head[0].AppendChild(scriptEl); 
    // Listen for readyState changes 
    ((mshtml.HTMLScriptEvents2_Event)element).onreadystatechange += delegate 
    { 
     if (element.readyState == "complete" || element.readyState == "loaded") 
     { 
      Callback.execute(callbackId); 
     } 
    }; 
} 
関連する問題