2012-01-15 13 views
5

私はwebbrowserコントロールを使用しているwpfアプリケーションを作成しています。とにかく私はhtml要素を探したり、クリックを呼び出すなどの基本的な機能を求められることがあります。私がやってすることによって、これを達成することができる午前WPF webbrowserコントロールとwinforms

リサイズで

にWebBrowserコントロール:私も呼び出すために管理

dynamic d = webBrowser1.Document; 
    var el = d.GetElementById("someId").SetAttribute("value", "I change the value"); 

webBrowser1.Document.GetElementById("someId").SetAttribute("value", "I change the value"); 

WPFのWebBrowserコントロールでは、私が行って、同じことを達成するために管理しました動的なタイプを使用してwpf webbrowserコントロールをクリックします。時々私はexeptionsを得る。

html要素を検索し、属性を設定し、クリックをのwpf Webブラウザーコントロールで、よく例外が発生する動的タイプを使用せずに、どのようにすることができますか? wpf webbrowserコントロールでwpfアプリケーションのwinforms webbrowserコントロールを置き換えたいと思います。

+1

WinformsのHtmlDocumentラッパークラスとHtmlElementラッパークラスは素晴らしいです。しかし、DOMがあなたが望む要素や属性がDOMに含まれていない場合、それは大きな音として爆発します。彼らはまた、爆弾を避けるためにnullを明示的にチェックする必要があります。 –

+0

私はテスト目的のhtmlドキュメントを作成したので、私が探しているhtml要素がドキュメントに含まれていると確信しています。しかし、ええ、私はいつもnull exeptionsをチェックすることに同意します... –

答えて

-3

私はこれを行っている方法は、あなたがHTTPRequestのを使用してレンダリングしたいページの...

ダウンロードHTMLテキストです。 HTMLテキストにHTMLの敏捷性パックを使用してJavaスクリプトを注入する。 jQueryを使用する場合は、最初にページをjQuerifyしてからイベントをDOM要素にバインドする必要があります。また、スクリプト内からC#関数を呼び出すこともできます。 ダイナミックタイプを混乱させることはなく、例外もありません。

また、linkの拡張メソッドを使用して、WCのスクリプトエラーを抑制することもできます。

Thisおよびthisが役立ちます。

1

あなたはすべての要素のプロパティとEventHandlerのプロパティを取得することができる方法以下の名前空間を使用してください:あなたのLoadCompleteイベントを設定し、コンストラクタまたはXAMLで

using mshtml; 

    private mshtml.HTMLDocumentEvents2_Event documentEvents; 
    private mshtml.IHTMLDocument2 documentText; 

を:

webBrowser.LoadCompleted += webBrowser_LoadCompleted; 

その方法であなたを作成します新しいWebブラウザドキュメントオブジェクトを開き、利用可能なプロパティを表示し、次のように新しいイベントを作成します。

private void webBrowser_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     documentText = (IHTMLDocument2)webBrowserChat.Document; //this will access the document properties as needed 
     documentEvents = (HTMLDocumentEvents2_Event)webBrowserChat.Document; // this will access the events properties as needed 
     documentEvents.onkeydown += webBrowserChat_MouseDown; 
     documentEvents.oncontextmenu += webBrowserChat_ContextMenuOpening; 
    } 

    private void webBrowser_MouseDown(IHTMLEventObj pEvtObj) 
    { 
     pEvtObj.returnValue = false; // Stops key down 
     pEvtObj.returnValue = true; // Return value as pressed to be true; 
    } 

    private bool webBrowserChat_ContextMenuOpening(IHTMLEventObj pEvtObj) 
    { 
     return false; // ContextMenu wont open 
     // return true; ContextMenu will open 
     // Here you can create your custom contextmenu or whatever you want 
    } 
関連する問題