2011-12-07 3 views
2

私はC#3.5のWebBrowserWinFormsのWebbrowerコントロールを使用してHTML文書の<HEAD>要素にアクセスするにはどうすればよいですか?

私はフォローのHTMLドキュメント内の先頭要素へのアクセスを取得しようとしているのWinFormsを使用しています:

this.webBrowserTest.DocumentText = @”<html> 
    <head> 
     <title>Test JavaScript WinForms</title> 
     <meta name="description" content="Test WinForms" />   
    </head> 
    <body></body> 
</html>” 

HtmlElementCollection headCollection = webBrowserTest.Document.GetElementsByTagName("HEAD"); 
HtmlElement head = headCollection[0] 

headCollection[0]null

であろう任意として渡さなっています1つのアイデアは何が間違っていますか?

おかげ

+1

DocumentCompletedまで待っていましたか? DocumentTextを設定すると、現在のドキュメントがダンプされ、非同期ナビゲーションが新しいドキュメントの解析を終了するまでドキュメントを使用できなくなります。 –

答えて

-1

はあなたがhead要素のid = "headid" 属性を提供します場合は、webBrowserTest.Document.All [ "headidを"]使用することができます

webBrowserTest.Document.All["HEAD"]; // or head 
+0

ありがとうございました。上記のPetrへの私のコメントを参照してください - "webBrowserTest.Document.All"は0のカウントを持っています。 –

+0

@hungoverbunny:代わりに 'WebBrowser.Document.Write()'メソッドを使います。 – abatishchev

0

を試してみました。

+0

ありがとうございました。でも、これはうまくいきません。 "webBrowserTest.Document.All"プロパティのカウントが0であることがわかります。その他の提案。 –

+0

これは変です。私にとっては、次の作品: 'ます。private void Form1_Load(オブジェクト送信者、EventArgsの電子) { webBrowser1.DocumentText = @ " <ヘッドID = "" headid ""> テストのJavaScriptのWinForms <メタ名=" "description" "content =" "WinFormsをテストする" "/> "; } プライベートvoid button1_Click(オブジェクト送信者、EventArgs e) { textBox1.Text = webBrowser1.Document.All ["headid"]。OuterHtml; } ' –

0

headタグを取得するコードが正常に表示されます。ドキュメントにアクセスする前に、ドキュメントが完全にロードされていることを確認してください。これを行うには、次のようにします。

// Add a handler for load complete. 
webBrowserTest.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentLoadCompleted); 

// Wait until load completes. 
while (webBrowserTest.ReadyState != WebBrowserReadyState.Complete) 
{ 
    System.Windows.Forms.Application.DoEvents(); 
} 

// On load complete, do stuff. 
private void DocumentLoadCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    WebBrowser browser = sender as WebBrowser; 
    HtmlElement head = browser.Document.GetElementsByTagName("head")[0]; 
    // do stuff... 
} 
関連する問題