WebView2 応用テクニック

ローカルフォルダーをWebサイトのようにアクセスする

WebView2では、ローカルフォルダに格納しているhtmlファイルを、WebサイトのURLのようにアクセスすることができます。

webView.CoreWebView2.SetVirtualHostNameToFolderMappingを実行することで、
ローカルフォルダを仮想ドメイン名に紐づけます。
これにより、WebView2で仮想ドメインURLにアクセスすれば、ローカルフォルダーをWebサイトであるかのように表示ができます。

WebView2ではURLにファイルを直接指定(file:///c:/folder/index.html)する事もできるのですが、
仮想ドメインを使用すると以下のメリットがあります。
・ファイルを開くという動きではなく、Webサイトを開いているように動作する
・ソーンのセキュリティを考慮不要
・JavaScriptのコードを実行できる

SetVirtualHostNameToFolderMappingメソッドの定義

//C#
public void SetVirtualHostNameToFolderMapping (string hostName, string folderPath, Microsoft.Web.WebView2.Core.CoreWebView2HostResourceAccessKind accessKind);

パラメータ

hostName:仮想ホスト名(ドメイン名)
folderPath:仮想ホスト名にマップされるフォルダーパス名。絶対パスと相対パスの指定が可能です。
accessKind:他のサイトから仮想ホストの下のリソースへのアクセスのレベル

サンプル

exeファイルと同じ場所にassetsフォルダを作成し、index.htmlを格納してください。

						Imports Microsoft.Web.WebView2.Core

						Public Class VirtualHost
							Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
						
								webView2.CoreWebView2.Navigate("https://appassets.example/index.html")
						
							End Sub
							Private Sub Base_Load(sender As Object, e As EventArgs) Handles MyBase.Load
						
								InitializeAsync()
						
							End Sub
						
							Private Async Sub InitializeAsync()
						
								Await webView2.EnsureCoreWebView2Async(Nothing)
						
								'フォルダをドメインに割り当てる
								webView2.CoreWebView2.SetVirtualHostNameToFolderMapping("appassets.example", "assets", CoreWebView2HostResourceAccessKind.Allow)
						
							End Sub
						
						End Class
					
						public partial class VirtualHost : Form
						{
							public VirtualHost()
							{
								InitializeComponent();
							}
					
							private void button1_Click(object sender, EventArgs e)
							{
								webView2.CoreWebView2.Navigate("https://appassets.example/index.html");
							}
					
							private void VirtualHost_Load(object sender, EventArgs e)
							{
								InitializeAsync();
					
							}
					
							public async void InitializeAsync()
							{
								await webView2.EnsureCoreWebView2Async(null);
					
								// フォルダをドメインに割り当てる
								webView2.CoreWebView2.SetVirtualHostNameToFolderMapping("appassets.example", "assets", CoreWebView2HostResourceAccessKind.Allow);
							}
						}
					

参考