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);
public void SetVirtualHostNameToFolderMapping (string hostName, string folderPath, Microsoft.Web.WebView2.Core.CoreWebView2HostResourceAccessKind accessKind);
パラメータ
hostName:仮想ホスト名(ドメイン名)
folderPath:仮想ホスト名にマップされるフォルダーパス名。絶対パスと相対パスの指定が可能です。
accessKind:他のサイトから仮想ホストの下のリソースへのアクセスのレベル
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); } }