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);
}
}
