WebView2によるWeb UI組み込みの知識マップ(知識グラフ)
WebView2はChromiumベースのMicrosoft Edgeを埋め込むコントロールで、既存のWinFormsやWPFアプリに部分的にWeb UIを組み込めるが、ChromiumのためActiveXをホストできず、Tridentエンジンで動くIEモードとは両立しない。ランタイムは自動更新されるEvergreenが原則で、オフラインの製造装置など限定的な場面を除きFixed Versionは避けるべきとされる。ユーザーデータフォルダーを明示的に指定しないと、Program Files配下のアプリでは初期化に失敗する。ネイティブとWebの連携はWebメッセージを基本にし、AddHostObjectToScriptのホストオブジェクト公開は内部でCOMの仕組みを使うため信頼できないコンテンツには登録しない。IEモードのActiveX依存画面を移行するには、ActiveXが担っていた機能をネイティブ側へ再実装しWebメッセージ経由で呼び出す設計が必要になる。
Microsoft Edge WebView2
Chromiumベースのランタイムを使ってWindowsアプリにWeb描画エンジンを埋め込む仕組み。WebBrowserコントロールの完全な差し替え部品ではない。
ActiveX
実務ではCOMベースのコントロールやその周辺資産をまとめて指す言葉として使われる技術群。特に.ocx形式のUIコントロールやIE/コンテナへ埋め込む部品を含むことが多い。
ActiveXコントロール
Microsoft Edge
Chromiumベースのマイクロソフト製ブラウザー。本体はActiveXをサポートしない。
IEモード
設定されたサイトに対してMicrosoft Edgeが IE系のエンジンを使い、ActiveXを含む一部のIE機能を動かすための互換レイヤー。延命策として位置づけられる。
Windows Forms
デスクトップGUIアプリケーションを構築するための.NET/.NET FrameworkのUIフレームワーク。
ユーザーデータフォルダー(UDF)
WebView2がCookie・キャッシュ・権限などを保存する場所。既定ではexeの隣に作られるため、%LOCALAPPDATA%配下のアプリ専用フォルダーを明示指定するのが定石とされる。
WebView2の初期化エラー
ユーザーデータフォルダーの既定の保存先に書き込めないことなどが原因で、WebView2アプリの起動時に発生する初期化エラー。Program Files配下にインストールしたアプリで典型的に起きる。
Evergreenランタイム
クライアントにインストールされた共有のWebView2ランタイムを全WebView2アプリが使い、自動更新される配布方式。セキュリティパッチが自動で当たりディスク消費も小さいため、公式が明確に推奨している。
Fixed Versionランタイム
特定バージョンのWebView2ランタイムをアプリに同梱する配布方式。動作検証済みの構成を凍結できる一方、同梱物が250MBを超え、ブラウザーエンジンの脆弱性修正を自分のリリースで配る責任を負う。
閉域ネットワーク
インターネットに接続せずに運用する隔離されたネットワーク。
オフライン環境
切断環境
Webメッセージ連携(PostWebMessageAsJson/WebMessageReceived)
ネイティブ側のPostWebMessageAsJson/WebMessageReceivedと、Web側のwindow.chrome.webview.postMessage/messageイベントによる、ネイティブとWebページの間の疎結合なメッセージ交換の仕組み。
ホストオブジェクト公開(AddHostObjectToScript)
AddHostObjectToScriptを使い、.NET/COMオブジェクトをJavaScriptから直接呼び出せるようにするWebView2の連携手段。Webメッセージより強力だが、ページが侵害されたときの影響が大きい。
COM(コンポーネントオブジェクトモデル)
公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。
遷移先ホワイトリスト検査(NavigationStarting)
NavigationStartingイベントで遷移先を社内ドメインのホワイトリストと照合し、想定外のURLは既定ブラウザーへ逃がすセキュリティ設計。
ActiveX機能のネイティブ再実装
IEモードのActiveXが担っていたシリアル通信・ファイルアクセス・専用機器制御などの処理を、WebView2のホストアプリ側(ネイティブ側)へ移し、Webメッセージ経由で呼び出せるようにする再設計。
.NET(Core以降)
.NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
モダンな.NET
.NET Framework
Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。
信頼できないWebコンテンツ
自社が管理しておらず、内容の安全性を保証できない任意のWebページ。侵害されている可能性を排除できないコンテンツ。
WebView2はChromiumベースのMicrosoft Edgeを、WinForms/WPF/WinUI/Win32 C++から使えるコントロールとして埋め込む。
WebView2はChromiumでありActiveXをホストする仕組みを持たないため、ActiveXは動作しない。
IEモードはEdgeの中で本物のIE11(Tridentエンジン)を動かし、ActiveXコントロールやブラウザーヘルパーオブジェクトをそのまま動作させる。
既存のWinForms業務アプリにWeb UIを段階的に組み込む場合、1画面だけをWebView2にするといった構成ができる。
WebView2はCookie・キャッシュ・権限などをユーザーデータフォルダーに保存する。
UDFの既定位置はexeの隣であり、Program Files配下にインストールしたアプリでは書き込みに失敗し初期化エラーになる。
ランタイムの提供方法としてEvergreenを選んだ場合、WebView2はクライアントにインストールされた共有ランタイムを使う。特定バージョンをアプリへ同梱するFixed Versionを選んだ場合は共有ランタイムを参照しない。
オフライン環境や検証済み構成を固定したい場面では、特定バージョンのランタイムをアプリに同梱するFixed Versionを使うこともできる。
Fixed Versionは動作検証済みの構成を凍結できるため、オフラインの製造装置や変更管理が厳格な環境では合理的な選択になる。
同梱物が250MBを超えるうえ脆弱性修正を自分のリリースで配る責任を負うため、限定的な場面を除きWebView2アプリの既定選択としては安易に選ぶべきではない。
ネイティブとWebの連携は、PostWebMessageAsJson/WebMessageReceivedによるWebメッセージ交換を既定の手段にする。
JavaScriptからネイティブ側を呼ぶ橋渡しが要る場合にAddHostObjectToScriptで.NET/COMオブジェクトを公開でき、公開は自社管理のコンテンツに限定すべきとされる。橋渡しが不要なアプリはホストオブジェクトを公開しない
AddHostObjectToScriptによるホストオブジェクト公開は、内部的にCOMの仕組みで動く。
WebView2は表示するコンテンツを、NavigationStartingでの遷移先ホワイトリスト検査によって限定できる。
WebView2導入では、ActiveXが担っていたシリアル通信・ファイルアクセス・専用機器制御などの機能をネイティブ側(ホストアプリ)へ移し、ActiveXの代替とする。
ネイティブ側へ移植したActiveX由来の機能は、Webメッセージ経由でWeb側から呼び出す設計にする。
ホストを.NET(Core以降)で作る場合、WebView2は3.1以降から利用できる。Win32 C++やWinUIでホストすることもでき、いずれかを選ぶ
ホストを.NET Frameworkで作る場合、WebView2は4.6.2以降から利用できる。Win32 C++やWinUI、.NET(Core以降)でホストすることもでき、いずれかを選ぶ
信頼できないコンテンツを表示しうるWebViewには、AddHostObjectToScriptで公開するホストオブジェクトを登録しないのが原則。