WebView2 アプリの開発のベスト プラクティス

すべての開発チームは、アプリケーションを構築する際に異なるプラクティスに従います。 WebView2 運用アプリをビルドするときは、次の推奨事項とベスト プラクティスに従うことをお勧めします。

通常、エバーグリーン WebView2 ランタイムを使用することをお勧めします。 固定バージョン ランタイム配布は、互換性要件が厳しいアプリにのみ推奨されます。 最新の機能とセキュリティ パッチが WebView2 アプリで使用できるように、常緑ランタイムはクライアントで自動的に更新されます。 また、エバーグリーン ランタイムでは、固定バージョン ランタイムよりもディスク上のストレージ領域が少なくて済みます。

エバーグリーン ランタイムを使用する場合は、WebView2 アプリを実行する前に、Evergreen WebView2 ランタイムがクライアントにインストールされているかどうかをテストします。 「エバーグリーン WebView2 ランタイムのデプロイ」を参照してください。

エバーグリーン ランタイムを使用する場合は、互換性テストを定期的に実行する

Evergreen WebView2 ランタイムを使用すると、ランタイムが自動的に更新されるため、互換性テストを定期的に実行する必要があります。 WebView2 アプリが引き続き期待どおりに動作することを確認するには、WebView2 コントロールの Web コンテンツを Microsoft Edge Insider (プレビュー) チャネル ( ベータ、開発、またはカナリア) に対してテストします。

このガイダンスは、Web 開発者に提供するガイダンスに似ています。 前方互換性については、「アプリをテストする」を参照してください。

インストールされている WebView2 ランタイムで新しい API がサポートされているかどうかをテストする

特定のバージョンの Webview2 SDK で開発された WebView2 アプリを実行するには、クライアントに互換性のあるバージョンの WebView2 ランタイムがインストールされている必要があります。 API は WebView2 に継続的に追加されるため、新しい API をサポートするためにランタイムの新しいバージョンもリリースされます。 機能検出を使用して、WebView2 アプリで使用される新しい API が、クライアントにインストールされている WebView2 ランタイムでサポートされていることを確認します。

Evergreen WebView2 ランタイムを使用する場合、クライアント上のランタイムが最新バージョンに自動的に更新されていないシナリオがいくつかあります。 たとえば、クライアントがインターネットにアクセスできない場合、ランタイムは自動的に更新されません。

さらに、一部のグループ ポリシーでは、ランタイムの更新が一時停止されます。 WebView2 アプリに更新プログラムをプッシュすると、クライアントのインストールされているランタイムで使用できない新しい API を呼び出そうとすると、アプリが機能しない可能性があります。

この状況を解決するには、最近追加した WebView2 API をコードが呼び出す前に、その API がクライアントのインストールされているランタイムで使用できるかどうかをテストします。 この新しい機能のテストは、新しい Web API を使用する前にサポートされている機能を検出する他の Web 開発のベスト プラクティスと似ています。 インストールされているランタイムで API の可用性をテストするには、次のいずれかを使用します。

  • QueryInterface C/C++ で。
  • try/catch.NET または WinUI のブロック。

インストールされているランタイムが最近追加した API をサポートしているかどうかをテストするには、「機能検出」を参照してください

固定バージョン ランタイムを更新する

固定バージョンの WebView2 ランタイムを使用する場合は、セキュリティ リスクを軽減するために、アプリにパッケージ化された WebView2 ランタイムを定期的に更新してください。 Webview2 アプリでサード パーティのコンテンツを使用する場合は、常にコンテンツが信頼されていないと考えてください。 「固定バージョン配布モード」を参照してください。

エバーグリーン ランタイムの新しいバージョンを管理する

新しいバージョンのエバーグリーン WebView2 ランタイムがクライアントにダウンロードされると、実行中のすべての WebView2 アプリは、ブラウザー プロセスがリリースされるまで、以前のバージョンのランタイムを引き続き使用します。 この動作により、アプリを継続的に実行でき、以前のランタイムが削除されるのを防ぐことができます。 新しいバージョンのランタイムを使用するには、以前の WebView2 環境オブジェクトへの参照をすべて解放するか、アプリを再起動する必要があります。 次回アプリが新しい WebView2 環境を作成すると、アプリは新しいバージョンのランタイムを使用します。

新しいバージョンのランタイムが使用可能になると、アプリを再起動するようにユーザーに通知するなど、アプリが自動的にアクションを実行できます。 新しいバージョンのランタイムが使用可能であることを検出するには、コードで add_NewBrowserVersionAvailable (Win32) または CoreWebView2Environment.NewBrowserVersionAvailable (.NET) イベントを使用できます。 コードがアプリの再起動を処理する場合は、WebView2 アプリが終了する前にユーザーの状態を保存することを検討してください。

ユーザー データ フォルダーの有効期間を管理する

WebView2 アプリは、Cookie、資格情報、アクセス許可などのデータを格納するユーザー データ フォルダーを作成します。 フォルダーを作成した後、アプリはユーザー データ フォルダーの有効期間の管理を担当します。 たとえば、アプリがアンインストールされるときに、アプリでクリーンアップを実行する必要があります。 「 ユーザー データ フォルダーの管理」を参照してください。

ランタイム プロセスエラーを処理する

WebView2 アプリはイベントをリッスンして処理 ProcessFailed する必要があるため、アプリは WebView2 アプリ プロセスをサポートするランタイム プロセスのエラーから回復できます。

WebView2 アプリは、アプリ プロセスと共に実行されるランタイム プロセスのコレクションによってサポートされます。 これらのサポートランタイム プロセスは、メモリ不足やユーザーによる終了など、さまざまな理由で失敗する可能性があります。 サポートするランタイム プロセスが失敗すると、WebView2 は ProcessFailed イベントを発生させてアプリに通知します。

環境オブジェクトのイベント ハンドラー

環境オブジェクトのアプリのイベント ハンドラーのいずれかが 環境オブジェクト への参照を保持し、アプリがイベント ハンドラーを削除せずに環境とイベント ハンドラーへの参照を解放するだけで、環境オブジェクトとハンドラー オブジェクトの間に循環参照が存在し、メモリがリークする可能性があります。

このようなメモリ リークを防ぐには、

  • 追加されたイベント ハンドラーの場合は、環境オブジェクトを解放する前にイベント ハンドラーを削除します。

  • イベント ハンドラーで環境オブジェクトへの参照を保持しないようにします。 代わりに、イベント ハンドラーは、"イベント完了" コールバックの引数から sender 環境オブジェクトにアクセスできます。

  • アプリで WebView2 オブジェクトへの参照を保持する場合は、可能な限り弱い参照を使用します。

WebView2 アプリの場合は、「 セキュリティで保護された WebView2 アプリを開発する」の推奨事項に従ってください。