C# WebBrowserの使い方と限界|IE問題・WebView2移行まで初心者向けに解説

はじめに

C#でWebページを扱うアプリケーションを作る際、初心者がまず出会うのがWebBrowserコントロールです。しかし、このコントロールはInternet Explorer(IE)ベースで動作するため、最新のWebサイトでは表示や操作に制限があります。本記事では、C# WebBrowserの基本的な使い方から、よくあるトラブル、そして最新のWebView2への移行方法まで、初心者向けにわかりやすく解説します。


1. C# WebBrowserとは?できること・使われる場面を初心者向けに解説

1-1. WebBrowserコントロールの役割

C#のWebBrowserコントロールは、Windows Formsアプリ内にWebページを埋め込むためのコンポーネントです。外部ブラウザを起動せずにWebコンテンツを表示・操作できるのが特徴です。

1-2. WinFormsアプリにWebページを埋め込める仕組み

WebBrowserは内部的にInternet Explorerのレンダリングエンジンを利用しています。これにより、HTMLやCSS、JavaScriptをアプリ内で直接表示・操作でき、ブラウザ操作の自動化や簡単なWebビューアを作ることが可能です。

1-3. WebBrowserでできる主なこと

  • URLの表示(Navigateメソッド)

  • ページ内のHTML取得・操作

  • フォーム入力やリンククリックの自動化

  • JavaScriptの実行

  • ローカルHTMLファイルの表示

1-4. WebBrowserが向いているケース・向いていないケース

向いているケース:

  • 簡単なWebビューや情報表示

  • 社内システム向けのIE対応ページ表示

向いていないケース:

  • 最新のWeb技術を使ったモダンなサイト

  • 高速な描画や複雑なJavaScript操作が必要な場合


2. C# WebBrowserの基本的な使い方

2-1. Windows Formsプロジェクトを作成する

Visual Studioで「Windows Forms アプリケーション」を新規作成します。プロジェクト名や保存先を決めて作成しましょう。

2-2. フォームにWebBrowserコントロールを配置する

ツールボックスからWebBrowserコントロールをフォームにドラッグ&ドロップします。サイズや配置は自由に変更可能です。

2-3. NavigateメソッドでURLを表示する

C#
webBrowser1.Navigate("https://example.com");

これで指定したURLがフォーム内に表示されます。

2-4. Back・Forward・Refresh・Stopの基本操作

  • webBrowser1.GoBack(); — 前のページへ戻る

  • webBrowser1.GoForward(); — 次のページへ進む

  • webBrowser1.Refresh(); — ページを再読み込み

  • webBrowser1.Stop(); — 読み込みを停止

2-5. DocumentCompletedイベントで読み込み完了を検知する

C#
webBrowser1.DocumentCompleted += (s, e) =>
{
MessageBox.Show("ページの読み込みが完了しました");
};

ページ読み込み完了後の処理を簡単に実装できます。


3. WebBrowserでよく使う実装例

3-1. テキストボックスに入力したURLを表示する

テキストボックスの内容を取得し、Navigateで表示できます。

3-2. 表示中ページのタイトル・URLを取得する

C#
string title = webBrowser1.DocumentTitle;
string url = webBrowser1.Url.ToString();

3-3. HTMLソースを取得する

C#
string html = webBrowser1.Document.Body.InnerHtml;

3-4. ページ内のフォームに値を入力する

HtmlElementを使い、フォーム要素にテキストを設定可能です。

3-5. ボタンやリンクをクリックする

C#
HtmlElement button = webBrowser1.Document.GetElementById("btnSubmit");
button.InvokeMember("click");

3-6. JavaScriptを実行する

C#
webBrowser1.Document.InvokeScript("alert", new object[] { "Hello World!" });

3-7. ローカルHTMLを表示する

C#
webBrowser1.Navigate(@"C:\path\to\file.html");

4. C# WebBrowserでよくあるトラブルと対処法

4-1. ページが正しく表示されない

IE互換モードの影響で、最新のHTML/CSSが正しくレンダリングされない場合があります。

4-2. JavaScriptやCSSが動かない・崩れる

古いIEエンジンが原因です。JavaScriptが複雑なサイトは動作が制限されます。

4-3. DocumentCompletedが複数回発生する

フレームを含むページでは、DocumentCompletedがフレームごとに発生することがあります。

4-4. スクリプトエラーのダイアログが表示される

IE設定のスクリプトエラー通知を無効にするか、イベントでエラー処理を追加します。

4-5. Googleログインや一部サイトでブロックされる

CookieやTLSバージョンの制限により、ログインができないケースがあります。

4-6. HTTPS・TLS関連で接続できない

IEの古いTLS設定が原因です。OSやレジストリでTLS 1.2以上を有効にする必要があります。

4-7. クリックや入力操作がうまく動かない

DOM操作やInvokeMemberの呼び出しタイミングに注意が必要です。


5. WebBrowserの最大の注意点|IEベースであること

5-1. WebBrowserはInternet Explorerエンジンを利用している

内部的にはIEのレンダリングエンジン(Trident)が使われています。

5-2. デフォルトでは古いIE互換モードで動作する場合がある

Windows環境によってはIE7互換モードで起動することがあり、最新サイトの表示が崩れます。

5-3. モダンなWebサイトとの相性が悪い理由

HTML5・CSS3・最新JavaScriptに対応していないため、デザイン崩れや機能制限が発生します。

5-4. セキュリティ面・保守面でのリスク

IEエンジンは既に更新が終了しており、脆弱性が残る可能性があります。

5-5. Internet Explorerサポート終了後もWebBrowserを使えるのか

IE終了後も動作はしますが、最新Web対応やセキュリティ面でリスクがあります。

5-6. 新規開発でWebBrowserを選ぶべきではない理由

モダンサイト対応や保守性を考えると、新規開発ではWebView2への移行が推奨されます。


6. IE互換モード問題の対処法

6-1. FEATURE_BROWSER_EMULATIONとは

アプリごとにIEのレンダリングモードを指定できるレジストリ設定です。

6-2. レジストリ設定でIEの互換モードを変更する方法

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION にアプリ名と値を設定します。

6-3. アプリ名ごとに設定が必要な理由

同じマシンで複数アプリがある場合、それぞれ独立してモードを指定する必要があります。

6-4. 32bit・64bit環境で注意すべき点

レジストリのパスが異なるため、ビット数に応じて正しい場所に設定する必要があります。

6-5. IE11相当で表示しても解決できないケース

JavaScript依存やTLS制限など、IE互換モードだけでは解決できない問題もあります。

6-6. レジストリ変更に頼る場合の注意点

設定ミスによるアプリの動作不良や、管理者権限が必要な場合があります。


7. WebBrowserからWebView2へ移行すべき理由

7-1. WebView2とは

Microsoftが提供するChromiumベースのWebコンポーネントで、最新のWeb技術に対応しています。

7-2. WebBrowserとWebView2の違い

  • WebBrowser:IEエンジン、古いWeb対応

  • WebView2:Chromiumエンジン、最新HTML/CSS/JS対応、非同期処理重視

7-3. WebView2がChromiumベースであるメリット

  • 最新Web標準への対応

  • JavaScriptやCSSの互換性向上

  • 高速レンダリングと安定性

7-4. WebView2へ移行した方がよいケース

  • モダンなWebページを表示するアプリ

  • 将来的な保守やセキュリティを考慮する場合

7-5. WebBrowserを使い続けてもよいケース

  • 社内システムでIE専用ページを表示する場合

  • 簡単な表示・操作のみで十分な場合

7-6. IE専用ページはWebView2で表示できるのか

WebView2でもIE専用ページを表示するには互換モードやEdge IEモードを活用する必要があります。


8. C#でWebView2を使う基本手順

8-1. WebView2 Runtimeを確認する

WebView2アプリの実行には、ユーザーPCにWebView2 Runtimeが必要です。

8-2. NuGetでMicrosoft.Web.WebView2を追加する

Visual StudioのNuGetパッケージマネージャーからインストールします。

8-3. フォームにWebView2コントロールを配置する

WebBrowserと同様にドラッグ&ドロップで配置可能です。

8-4. EnsureCoreWebView2Asyncで初期化する

C#
await webView21.EnsureCoreWebView2Async();

初期化後にページ表示やスクリプト実行が可能になります。

8-5. SourceプロパティでURLを表示する

C#
webView21.Source = new Uri("https://example.com");

8-6. NavigationCompletedで読み込み完了を検知する

C#
webView21.NavigationCompleted += (s, e) =>
{
MessageBox.Show("ページの読み込み完了");
};

8-7. ExecuteScriptAsyncでJavaScriptを実行する

C#
await webView21.ExecuteScriptAsync("alert('Hello WebView2');");

9. WebBrowserからWebView2へ移行するときの対応表

9-1. NavigateからSourceへの置き換え

webBrowser1.Navigate(url)webView21.Source = new Uri(url)

9-2. DocumentCompletedからNavigationCompletedへの置き換え

非同期イベントとして置き換えることで、フレーム依存の誤動作を防止できます。

9-3. Document操作からJavaScript実行への置き換え

直接DOM操作からExecuteScriptAsyncによる操作に変更します。

9-4. InvokeScriptからExecuteScriptAsyncへの置き換え

非同期呼び出しに変わるため、処理タイミングの調整が必要です。

9-5. Cookie・認証・ユーザーデータ管理の違い

WebView2はChromiumベースのプロファイル管理を使うため、Cookieや認証の取り扱いが異なります。

9-6. 非同期処理でつまずきやすいポイント

WebView2は初期化やスクリプト実行が非同期であるため、順序やタイミングに注意が必要です。


10. C# WebBrowserに関するよくある質問

10-1. WebBrowserは今でも使える?

はい。ただしIEベースで最新Webに非対応のため、限定的な用途向けです。

10-2. WebBrowserでEdgeを使うことはできる?

直接Edgeエンジンを利用することはできません。WebView2への移行が必要です。

10-3. WebBrowserでIEモードは使える?

内部的にIEエンジンを使っているため、IE互換モードで動作します。

10-4. WebBrowserでChromeのように表示できる?

いいえ、モダンなレンダリングや拡張機能には対応していません。

10-5. WebView2は.NET Frameworkでも使える?

はい、.NET Framework 4.6.2以上でも利用可能です。

10-6. 初心者はWebBrowserとWebView2のどちらを学ぶべき?

  • 学習目的や簡単な操作:WebBrowser

  • モダンアプリ開発や保守性重視:WebView2


まとめ

C# WebBrowserは簡単にWebページを表示できる便利なコントロールですが、IEベースの制約や互換性問題があります。モダンWeb対応やセキュリティ面を考慮すると、新規開発ではWebView2への移行が推奨されます。本記事で紹介した基本操作やトラブル対策を押さえ、状況に応じてWebBrowserとWebView2を使い分けましょう。