C#のWinFormsでWebView2を試す。

C# コンピュータ
C#

WebView2はWebブラウザ(Edge)をWinFormsのコントロールとしてデスクトップアプリケーションで扱うことが出来るとのことですので、試してみたいと思います。

プロジェクトの作成

mkdir プロジェクト名
cd プロジェクト名
dotnet new winforms
dotnet add package Microsoft.Web.WebView2

(ビルド時警告が出る)

サンプルプログラム

ファイル名:Form1.cs

using Microsoft.Web.WebView2.WinForms;

namespace webview2sample01;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        WebView2 wb = new WebView2
        {
            Parent = this,
            Dock = DockStyle.Fill,
        };
        TextBox tb1 = new()
        {
            Parent = this,
            Dock = DockStyle.Top,
            Text = "https://maywork.net/",
        };
        Button btn1 = new()
        {
            Parent = this,
            Dock = DockStyle.Bottom,
            Text = "タイトル取得"
        };

        tb1.KeyDown += (s, e) =>
        {
             if(e.KeyCode == Keys.Enter)
             {
                wb.Source = new Uri(tb1.Text);
             }
        };
        btn1.Click += async (s, e) =>
        {
            string str1 = await wb.ExecuteScriptAsync("window.document.title");
            MessageBox.Show(str1, "タイトル");
        };
    }
}

実行

プログラムを実行するとテキストボックスに当サイトのURLがセットされているので、テキストボックスでエンターキーを押すとページが読み込まれます。
読み込まれたら、フォーム下の「タイトル取得」ボタンをクリックするとメッセージボックスが表示されます。

タイトルを取得しているコードは、wb.ExecuteScriptAsync(“…”)部分で、引数はHTML内で実行するJavaScriptを記述します。
今回のプログラムでは、比較的単純なtitleを取得しています。C#側からJavaScriptを実行し結果をC#側で受け取ってWinFormsのMessageBoxで表示しています。

レンダリングされたページに対し動的にJavaScriptを実行することが出来るので、色々な要素にアクセスすることが出来そうです。

逆にJavaScriptからC#のコードを呼び出すことも出来るらしいですが、機会があったら試してみたいと思います。

以上

コメント