[C#] WebBrowserからWebView2に乗り換える方法
C#でWebBrowserからWebView2に乗り換えるには、まずMicrosoft Edge WebView2 Runtimeをインストールします。
次に、プロジェクトにMicrosoft.Web.WebView2 NuGetパッケージを追加します。
フォームにWebView2コントロールを配置し、Source
プロパティを使用して表示するURLを設定します。
WebView2はChromiumベースであり、よりモダンなWeb技術をサポートしています。
イベントやプロパティもWebBrowserとは異なるため、必要に応じてコードを調整します。
これにより、より高速で安全なWebコンテンツの表示が可能になります。
WebBrowserとWebView2の違い
WebBrowserコントロールは、.NET Frameworkに組み込まれている古いWebブラウジングコンポーネントで、Internet Explorerエンジンを使用しています。
一方、WebView2は、Microsoft Edge(Chromiumベース)を利用した新しいWebブラウジングコンポーネントです。
WebView2は、最新のWeb標準に対応しており、パフォーマンスやセキュリティが向上しています。
また、WebView2は、アプリケーションの更新時に自動的に最新のEdgeエンジンを使用するため、常に最新の機能を利用できます。
これにより、Webアプリケーションの表示や操作がよりスムーズになり、ユーザー体験が向上します。
WebView2の導入準備
必要なソフトウェアのインストール
Microsoft Edge WebView2 Runtimeのインストール
WebView2を使用するためには、Microsoft Edge WebView2 Runtimeが必要です。
以下の手順でインストールを行います。
- Microsoftの公式サイトからWebView2 Runtimeをダウンロードします。
- ダウンロードしたインストーラーを実行し、画面の指示に従ってインストールを完了させます。

このRuntimeは、WebView2を利用するアプリケーションが動作するための基盤となります。
また、インストーラー起動時に以下の画面が出た場合はインストール済みなので、別途ランタイムのインストールは不要です。

Visual Studioのバージョン確認
WebView2を使用するには、Visual Studio 2019以降のバージョンが必要です。
以下の手順でバージョンを確認します。
- Visual Studioを起動します。
- メニューバーから「ヘルプ」を選択し、「バージョン情報」をクリックします。
- 表示されたウィンドウで、Visual Studioのバージョンを確認します。
最新のバージョンを使用することで、WebView2の機能を最大限に活用できます。
NuGetパッケージの追加
Microsoft.Web.WebView2のインストール手順
WebView2をプロジェクトに追加するためには、NuGetパッケージをインストールします。
以下の手順で行います。
- Visual Studioで対象のプロジェクトを開きます。
- メニューバーから「ツール」を選択し、「NuGet パッケージマネージャ」をクリックします。
- 「ソリューションのNuGetパッケージの管理」を選択します。
- 検索ボックスに
Microsoft.Web.WebView2
と入力し、検索します。 - 検索結果から
Microsoft.Web.WebView2
を選択し、「インストール」ボタンをクリックします。 - ライセンスに同意し、インストールを完了させます。
これで、WebView2を使用する準備が整いました。
WebView2コントロールの配置
フォームデザイナーでの配置方法
Visual Studioのフォームデザイナーを使用してWebView2コントロールを配置する手順は以下の通りです。
- Visual Studioでプロジェクトを開き、フォームデザイナーを表示します。
- ツールボックスから
WebView2
を探します。

- WebView2コントロールをフォーム上にドラッグ&ドロップします。
- 配置したWebView2コントロールのサイズや位置を調整します。
これで、フォーム上にWebView2コントロールが配置されました。
コードでの配置方法
コードを使用してWebView2コントロールを配置する場合、以下の手順で行います。
using System;
using System.Drawing;
using System.Windows.Forms;
partial class MyForm : Form
{
private Microsoft.Web.WebView2.WinForms.WebView2 webView2Control;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// WebView2コントロールのインスタンスを作成
webView2Control = new Microsoft.Web.WebView2.WinForms.WebView2();
// コントロールのサイズと位置を設定
webView2Control.Size = new Size(800, 600);
webView2Control.Location = new Point(10, 10);
// Googleを開く
webView2Control.Source = new Uri("https://www.google.com/");
// フォームにWebView2コントロールを追加
this.Controls.Add(webView2Control);
}
}

このコードでは、WebView2コントロールをプログラムで作成し、フォームに追加しています。
ブラウザ自体はMicrosoft Edgeなので開発者ツールも使用可能です。
WebView2の基本プロパティ設定
WebView2コントロールには、いくつかの基本的なプロパティがあります。
以下は、よく使用されるプロパティの一覧です。
プロパティ名 | 説明 |
---|---|
Source | 表示するURLを設定するプロパティ |
ZoomFactor | ズーム倍率を設定するプロパティ |
IsVisible | コントロールの表示/非表示を設定するプロパティ |
DefaultBackgroundColor | 背景色を設定するプロパティ |
これらのプロパティを適切に設定することで、WebView2コントロールの表示や動作をカスタマイズできます。
例えば、Source
プロパティを使用して特定のURLを表示することができます。
WebView2の基本的な使い方
URLの設定とナビゲーション
WebView2コントロールで特定のURLを表示するには、Source
プロパティを設定します。
以下のコードは、WebView2コントロールにURLを設定し、ナビゲーションを行う方法を示しています。
partial class MyForm : Form
{
private Microsoft.Web.WebView2.WinForms.WebView2 webView2Control;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webView2Control = new Microsoft.Web.WebView2.WinForms.WebView2();
webView2Control.Size = new Size(800, 600);
webView2Control.Location = new Point(10, 10);
this.Controls.Add(webView2Control);
// URLを設定してナビゲーションを開始
webView2Control.Source = new Uri("https://www.example.com");
}
}
このコードでは、WebView2コントロールにhttps://www.example.com
というURLを設定し、ナビゲーションを開始しています。
イベントハンドリング
WebView2コントロールでは、さまざまなイベントをハンドリングすることができます。
特に、ナビゲーションの完了やエラー発生時のイベントは重要です。
ナビゲーション完了イベント
ナビゲーションが完了した際に発生するイベントをハンドリングするには、NavigationCompleted
イベントを使用します。
以下のコードは、ナビゲーション完了時にメッセージを表示する例です。
webView2Control.NavigationCompleted += WebView2Control_NavigationCompleted;
private void WebView2Control_NavigationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
{
if (e.IsSuccess)
{
MessageBox.Show("ナビゲーションが完了しました。");
}
else
{
MessageBox.Show("ナビゲーションに失敗しました。");
}
}
このコードでは、ナビゲーションが成功したかどうかを確認し、結果に応じてメッセージを表示しています。
エラーハンドリングイベント
WebView2コントロールでエラーが発生した場合、NavigationStarting
イベントを使用してエラーをハンドリングできます。
以下のコードは、ナビゲーション中にエラーが発生した場合の処理を示しています。
webView2Control.NavigationStarting += WebView2Control_NavigationStarting;
private void WebView2Control_NavigationStarting(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationStartingEventArgs e)
{
// エラーが発生した場合の処理
if (e.Uri == "https://www.example.com/error")
{
MessageBox.Show("エラーが発生しました。");
e.Cancel = true; // ナビゲーションをキャンセル
}
}
このコードでは、特定のURLに対してエラーが発生した場合にメッセージを表示し、ナビゲーションをキャンセルしています。
これにより、ユーザーに適切なフィードバックを提供できます。
WebView2の高度な機能
JavaScriptとの相互運用
WebView2では、C#アプリケーションとJavaScript間で相互にデータをやり取りすることができます。
これにより、Webページ内のJavaScript関数
を呼び出したり、JavaScriptからC#のメソッドを呼び出すことが可能です。
以下は、C#からJavaScript関数
を呼び出す例です。
// JavaScript関数を呼び出す
await webView2Control.ExecuteScriptAsync("alert('Hello from C#!');");
このコードは、WebView2内でJavaScriptのalert関数
を呼び出し、メッセージボックスを表示します。
また、JavaScriptからC#のメソッドを呼び出すには、AddScriptToExecuteOnDocumentCreatedAsyncメソッド
を使用します。
await webView2Control.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(@"
window.chrome.webview.addEventListener('message', function(event) {
// C#メソッドを呼び出す
window.chrome.webview.postMessage('Hello from JavaScript!');
});
");
Cookieとセッション管理
WebView2では、Cookieやセッションの管理が可能です。
これにより、ユーザーのログイン情報やセッションデータを保持することができます。
Cookieの取得や設定は、CoreWebView2.CookieManager
を使用して行います。
以下は、Cookieを設定する例です。
var cookie = new Microsoft.Web.WebView2.Core.CoreWebView2Cookie
{
Name = "myCookie",
Value = "cookieValue",
Domain = "example.com",
Path = "/",
Expires = DateTime.Now.AddDays(1) // 1日後に期限切れ
};
await webView2Control.CoreWebView2.CookieManager.AddOrUpdateCookieAsync(cookie);
このコードでは、myCookie
という名前のCookieを設定し、1日後に期限切れになるようにしています。
Cookieの取得は、GetCookiesAsyncメソッド
を使用して行います。
セキュリティ設定
WebView2では、セキュリティを強化するための設定が可能です。
特に、コンテンツセキュリティポリシー(CSP)を設定することで、悪意のあるスクリプトの実行を防ぐことができます。
以下は、CSPを設定する例です。
await webView2Control.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(@"
const meta = document.createElement('meta');
meta.httpEquiv = 'Content-Security-Policy';
meta.content = 'default-src https:; script-src https:; object-src 'none';';
document.getElementsByTagName('head')[0].appendChild(meta);
");
このコードでは、HTTPSからのリソースのみを許可するCSPを設定しています。
これにより、HTTPからのリソースの読み込みを防ぎ、セキュリティを向上させることができます。
WebView2を使用する際は、これらの高度な機能を活用して、より安全でインタラクティブなアプリケーションを構築することができます。
WebView2への移行の注意点
互換性の確認
WebView2に移行する際は、既存のアプリケーションとの互換性を確認することが重要です。
特に、WebBrowserコントロールを使用している部分が多い場合、以下の点をチェックしてください。
- HTML/CSSの互換性: WebView2はChromiumベースのエンジンを使用しているため、HTMLやCSSの解釈がWebBrowserとは異なる場合があります。
特に、古いHTMLタグやCSSプロパティが正しく表示されないことがあります。
- JavaScriptの動作: JavaScriptの実行環境も異なるため、特定のスクリプトが正常に動作するかどうかを確認する必要があります。
- APIの変更: WebView2では、WebBrowserで使用していたAPIが利用できない場合があります。
移行前に、必要な機能がWebView2でサポートされているかを確認してください。
パフォーマンスの最適化
WebView2は、パフォーマンスが向上していますが、最適化を行うことでさらに快適なユーザー体験を提供できます。
以下のポイントに注意してください。
- リソースの管理: WebView2コントロールが表示するコンテンツのリソース(画像、スクリプト、スタイルシートなど)を最適化し、読み込み時間を短縮します。
- キャッシュの利用: WebView2はキャッシュ機能を持っているため、頻繁にアクセスするリソースをキャッシュすることで、再読み込みを減らし、パフォーマンスを向上させることができます。
- 非同期処理: WebView2の操作は非同期で行うことができるため、UIスレッドをブロックしないように注意し、スムーズな操作感を維持します。
デバッグとトラブルシューティング
WebView2に移行した後は、デバッグやトラブルシューティングが必要になる場合があります。
以下の方法で問題を特定し、解決することができます。
- デバッグツールの利用: WebView2には、開発者ツール(DevTools)が組み込まれており、F12キーを押すことで開くことができます。
これを使用して、JavaScriptのエラーやネットワークの問題を確認できます。
- ログの取得: WebView2の
CoreWebView2
オブジェクトを使用して、ログを取得することができます。
これにより、エラーの詳細情報を得ることができます。
- エラーハンドリング: イベントハンドリングを活用して、ナビゲーションエラーやスクリプトエラーを適切に処理し、ユーザーにフィードバックを提供します。
これらの注意点を考慮することで、WebView2への移行をスムーズに行い、アプリケーションのパフォーマンスと安定性を向上させることができます。
応用例
Webアプリケーションの埋め込み
WebView2を使用することで、デスクトップアプリケーション内にWebアプリケーションを埋め込むことができます。
これにより、ユーザーはアプリケーションを離れることなく、Webベースの機能を利用できます。
以下は、Webアプリケーションを埋め込む例です。
webView2Control.Source = new Uri("https://www.example-webapp.com");
このコードを使用することで、指定したWebアプリケーションがWebView2コントロール内に表示されます。
ユーザーは、アプリケーションの一部としてWebアプリケーションを操作できます。
ローカルHTMLファイルの表示
WebView2では、ローカルのHTMLファイルを表示することも可能です。
これにより、オフラインでのコンテンツ表示や、アプリケーションにバンドルされたリソースを利用することができます。
以下は、ローカルHTMLファイルを表示する例です。
webView2Control.Source = new Uri("file:///" + Path.Combine(Application.StartupPath, "localfile.html"));
このコードでは、アプリケーションの実行パスにあるlocalfile.html
というHTMLファイルを表示します。
ローカルファイルを利用することで、ユーザーに対してカスタマイズされたコンテンツを提供できます。
動的コンテンツのレンダリング
WebView2を使用すると、動的に生成されたコンテンツを表示することができます。
C#からHTMLやJavaScriptを生成し、WebView2に表示させることが可能です。
以下は、動的にHTMLを生成して表示する例です。
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
<title>動的コンテンツ</title>
</head>
<body>
<h1>こんにちは、WebView2!</h1>
<p>これはC#から生成されたHTMLです。</p>
</body>
</html>";
webView2Control.NavigateToString(htmlContent);
このコードでは、C#で生成したHTMLコンテンツをWebView2に直接表示しています。
これにより、アプリケーションの状態に応じて動的にコンテンツを変更することができます。
WebView2を活用することで、デスクトップアプリケーションにWebの利便性を取り入れ、よりリッチなユーザー体験を提供することが可能です。
まとめ
この記事では、C#のWebView2コントロールの導入から基本的な使い方、高度な機能まで幅広く解説しました。
WebView2は、最新のWeb標準に対応した強力なブラウジングコンポーネントであり、デスクトップアプリケーションにWeb機能を統合するための優れた選択肢です。
これを機に、WebView2を活用して、よりリッチでインタラクティブなアプリケーションを開発してみてはいかがでしょうか。