2009-03-11 19 views
20

WebBrowserコントロールを使用して新しいコンテンツ/要素を追加するAJAXで変更可能なWebコンテンツを表示するアプリケーションを作成しています。 私は新しい要素を試したことがあるようには思えません。 BrowserCtl.DocumentTextには最新のページがありません。もちろん、「ソースの表示」にもありません。C#WebBrowserコントロール - AJAXの後にドキュメント要素を取得しますか?

このコントロールを使用してこの新しいデータを取得する方法はありますか? :( おかげ

IE助けてください:。!?あなたがウェブページを制御します

Browser.Navigate("www.somewebpagewithAJAX.com"); 
//Code that waits for browser to finish... 
... 
//WebBrowser control has loaded content and AJAX has loaded new content 
// (is visible at runtime on form) but can't see them in Browser.Document.All 
// or Browser.DocumentText :(

答えて

-1

もしそうなら、ここでの方法について説明ブログの記事があります: http://www.palladiumconsulting.com/blog/sebastian/2007/04/ultimate-intranet-toy.html

の場合おそらく解決策はありますが、私はあなたを助けることはできません。ごめんなさい。

+0

HtmlElement target = webBrowser.Document.GetElementById("div_populated_by_ajax"); if (target != null) { target.AttachEventHandler("onpropertychange", handler); } 

、最終的には、残念ながら、私には、JavaScript ...しかし、おかげでコントロールしていません。 – aikeru

+0

http://web.archive.org/web/20071009143308/http://www.palladiumconsulting.com/blog/sebastian/2007/04/ultimate-intranet-toy.html – Chloraphil

3

DOMを使用する必要があります。 IHTMLDocumentへのWebBrowser.Document.DomDocument?いくつかのCOMインターフェイスまたはMicrosoft.mshtmlアセンブリをインポートする必要があります。

詳細はhttp://msdn.microsoft.com/en-us/library/aa752641(VS.85).aspxをご覧ください。

+0

よろしく!私は可能ならばこれを避けたいと思います。私はHtmlElement.DomElement COMタイプで作業していますが、IHTMLDocumentは現在変更されている要素をpost-javascriptで持っていますか? – aikeru

+0

私もこれをやろうとしていますが、あなたは解決策を見つけましたか? – TheGateKeeper

2

Ajaxリクエストから生成されるコンテンツを読み込んでいるため、ユーザーが関連するデータがロードされるポイントまでアプリケーションを進める必要があるとします。そのポイントでデータを読み取るコードを実行します。

そうでない場合は、このプロセスを自動化して、読んで興味のあるDOMノードを構築するクリックイベントを生成する必要があります。私はこれをWebBrowserコントロールとやや共通して行い、そのレイヤーをJavascriptで記述して.InvokeScript()で呼び出す傾向があります。もう一つのルートは、C#からAjax機能を発射し、手動でクリックイベントをトリガしたノードを見つけるために、次のようになります。上記のスクリプトで注意する

HtmlElement content = webMain.Document.GetElementById("content"); 
content.RaiseEvent("onclick"); 

重要な側面は、DOMの中で単純ノードとあなたが対話することができるという事実でありますC#の場合は、HtmlElementオブジェクト型の制限を受け入れて回避してください。

+0

有益なポストをありがとう、残念なことに私の問題は、JavaScriptがすでに実行されていると、ページに新しい要素があり、その要素と対話したり、値をチェックしたりする必要があるということです。 ( – aikeru

+0

)最初の読み込み後に作成されたDOMおよび要素へのライブアクセスを提供する.Document参照は、元のものと同じアクセス可能です。生成された要素がフレーム内に存在する可能性はありますか? –

0

javascriptを実行して要素をキャプションし、新しいウィンドウで表示するのはどうですか?

私はそれをテストしていませんが、動作する可能性があります。

(WebBrowser)w.Navigate("javascript:GetElementById('div').innerHtml;", true); 

新しいウィンドウでリターンを開くためのtrue属性。 (フレームまたは多分もっと良い方法を見つけることができます)

NewWindowイベントをキャプチャするには、Windows/System32フォルダにあるSHDocVw.dllを参照する必要があります。次に、Webブラウザーコントロールを以下のようにキャストできます。

SHDocVw.WebBrowser_V1 browser = (SHDocVw.WebBrowser_V1)(WebBrowser)w.ActiveXInstance; 

レスポンスを保存した直後に閉じることができます。幸運にて、それがどうなるか教えてください。

5
​​
+0

素敵な解決策。私は楽しみのためだけに試してみました**簡単な事柄**、これはかなりいいです。 – Hugo

+2

これは古いhtmlをレンダリングし続けています。ネットで試しました4.0 –

16

私はこの問題を解決しました。

キーは、onPropertyChangedのイベントハンドラを添付して、ajax呼び出しによって生成されたdiv要素のイベントです。

private void handler(Object sender, EventArgs e) 
{ 
     HtmlElement div = webBrowser.Document.GetElementById("div_populated_by_ajax"); 
     if (div == null) return; 
     String contentLoaded = div.InnerHtml; // get the content loaded via ajax 
} 
+0

こんにちは私はされているYouTubeのコメントでこれをやろうとしていますが、これがどのように機能するかはわかりません。 – Alok

関連する問題