WebBrowserクラスは、WebBrowserコントロールとも呼ばれます。コントロールの名前が示すように、UIコントロールとしての機能を持っており、WebBrowserクラスを使用することで、プログラム中で、Webサイトを表示することができます。
最新の機能を使用しているWebサイトを表示する際に問題があるので、新たに使い方を学ぶ意味はありませんが、過去に紹介されてサンプルプログラムで使われている例を理解する際やWebBrowserクラスを使用した既存のプログラムを改修する際には、知っておく必要があります。
- WebBrowserコントロール
- WebBrowserクラス(System.Windows.Controls名前空間(WPF)) .NET Framework 3.5 sp1以降WPF用のコントロール
- WebBrowserクラス(System.Windows.Forms名前空間(Form)) .NET Framework 2.0以降 Form用のコントロール
WebBrowserコントロールは、html形式の情報をC#プログラム内で表示するための仕組みです。
最新の状況には対応していない
ブラウザと呼ばれるWebサイトを表示するプログラムであっても、以前は、同じソースコードを表示しても、ブラウザごとに、そして、そのバージョンごとにレイアウトが崩れたり、機能が不足して表示できないことがありました。
これは、htmlやstylの機能や標準化が不十分な頃、それぞれのグループが独自拡張を行った結果です。WebBrowserクラスは、その影響を受けています。WebBrowserクラスは、内部エンジンに、すでに開発が終了している、Microsoftが提供していたInternet Explorerと同じものが使用されています。デフォルト設定では、Internet Explorer 7と同等の状態です。また、レジストリを操作することで、Internet Explorer 11までバージョンを上げることができます。それでも、最新の機能には対応していません。そのため、新しく作成するアプリケーションには使用することはお勧めしません。その場合は、WebViewコントロール (Windows Community Toolkit v3.0に含まれている)を選択することをお勧めします。
同じ名前のForm用とWPF用のクラスが存在する
WebBrowserクラスを使うための情報を集める際に混乱するのは、別の名前空間で定義されたForm用とWPF用の異なるクラスが存在することです。
- System.Windows.Controls名前空間(WPF) .NET Framework 3.5 sp1以降
- System.Windows.Forms名前空間(Form) .NET Framework 2.0以降
プログラム中で、Webサイトを表示したいときは、(現在では、最新の機能に対応していないので利用する価値はありませんが)それぞれの開発環境に適合したものを利用してください。
また、機能も異なります。System.Windows.Controls名前空間に存在するWPF用のWebBrowserクラスは、Webサイトを表示するUIコントロールとして使用します。
一方、System.Windows.Forms名前空間に存在するForm用のWebBrowserクラスは、Webサイトを表示するUIコントロールとして使用する他に、動的サイトで、動的に生成されたサイトのドキュメントを取得できる機能を持っているため、Form、WPFの区別に関係なく、動的サイトの情報をプログラムで取得するサンプル例の中で使われていることがあります。
しかし、あらたに、動的サイトから情報を取得するプログラムを作成する場合は、WebBrowserクラスを使うのではなく、HttpClientクラス(System.Net.Http名前空間、.NET 4.5以降)やパーサーを利用することをお勧めします。
WebBrowserクラスで使われている内部エンジンのバージョンを変更する
WebBrowserクラスで使われている内部エンジンのバージョンは、レジストリを操作することで変更できることが知られています。内部エンジンのバージョンを新しいものに変更することで、既存のWebBrowserクラスを使用したプログラムのトラブルを避けることができる可能性があります。
しかし、これが、System.Windows.Controls名前空間に存在するWPF用のWebBrowserクラスとSystem.Windows.Forms名前空間に存在するForm用のWebBrowserクラスのそれぞれに等しく機能するかは、確認していません。後者にのみ有効な可能性も考慮しておく必要があります。
この話題に関連して、C#プログラムから、レジストリを操作するプログラムの例が多く見つかります。複数台のパソコンのレジストリを変更する場合は、プログラムから変更する方法も検討する必要があります。
System.Windows.Controls名前空間のWebBrowserクラスを使ってWebサイトを表示する
System.Windows.Controls名前空間に存在するWPF用のWebBrowserクラスを使用して、Webサイトを表示するプログラムを作成します。
System.Windows.Forms名前空間に存在するForm用のWebBrowserクラスで、動的に生成されたサイトのドキュメントを取得する
System.Windows.Forms名前空間に存在するForm用のWebBrowserクラスは、Webサイトを表示するFormアプリケーションで使われるUIコントロールとして使用する他に、動的サイトで、動的に生成されたサイトのドキュメントを取得できる機能を持っています。
mshtml名前空間が、32bit環境向けのものしか提供されていません(おそらく、64bit環境では、動かすことができません)。
そのため、あらたに、動的サイトから情報を取得するプログラムを作成する場合は、WebBrowserクラスを使うのではなく、HttpClientクラス(System.Net.Http名前空間、.NET 4.5以降)やパーサーを利用することをお勧めします。