WebBrowserで、内部のDOMを扱う DomElement プロパティ

気晴らしに TwiNetReader を開発していますが、

20100729_05.jpg

上記のように、テキストボックスも消すことができました。

ええ、これで、晴れて「つい読み専用」ということで。

# 実は「返信」ボタンをクリックした時に、現れるという仕組みを入れています。

暫く、自分で使ってから公開しますが、ノウハウの部分をちょとだけ。

右上の広告を消すのは、こんなソースです。

      HtmlDocument doc = webBrowser1.Document;
      // 広告を消す
      el = doc.GetElementById(“side_ad_base”);
      el.Style = “display: none”;

ブラウザの Document プロパティを取得して、GetElementById メソッドで拾ってきて、スタイルを設定するだけ。

これをブラウザのCompleted イベントの中に入れればOKです。

さらに、昔の HTML DOM を知っている人ならば、ネイティブの DOM を扱いたいわけで、この場合は、「mshtml.IHTMLElement」を使います。

HtmlElement.DomElement プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=JA-JP&k=k(SYSTEM.WINDOWS.FORMS.HTMLELEMENT.DOMELEMENT);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

使い方は、

  1. 「mshtml.tlb」 を参照設定する( mshtml.dll ではない)
  2. mshtml.IHTMLElement i = doc.DomElement as mshtml.IHTMLElement;
    な感じでキャストすればOK。

あとは、旧来のHTML DOM として扱えます。

これ、何故使うのかというと、なぜか .NET の DOM だと class 名が取れません。

なので、DomElement から、ClassName を参照しないといけないという、、、何故なんでしょうね?

そんな訳で、ツイートのテキストボックスを一括で消すように

foreach (HtmlElement item in doc.GetElementsByTagName(“fieldset”))
{
 mshtml.IHTMLElement i = item.DomElement as mshtml.IHTMLElement;
 if ( i.className == “common-form standard-form” ) {
  el_input =item;
  el_input.Style = “display: none;”;
  break;
 }
}

な、ソースを書いています。

el_input は、再表示するために保存しているのです。

 

カテゴリー: 開発 パーマリンク