将 WebView2 映射到相对路径
Mapping WebView2 to a relative path
我正在开发一个 WPF 项目(Visual Studio 2022 和 Net 6.0)。我的项目 (MyNotices) 的文件夹中有本地 html 文件。我在 xaml 代码中有 WebView2,如下所示
<DockPanel Width="1200" Height="600" Visibility="Visible" x:Name="web1">
<wv2:WebView2 x:Name="webView" Width="{Binding ElementName=CurrentPresenter, Path=ActualWidth}"
Height="{Binding ElementName=CurrentPresenter, Path=ActualHeight}" Source=""/>
</DockPanel>
我想将 webview 的源映射到本地 html 文件。如果我使用 html 文件的绝对路径,效果很好,如下所示
await webView.EnsureCoreWebView2Async();
webView.Source = new Uri("/C:/Users/xxxx/source/repos/MyNotices/Local/RichText.html");
我想使用相对路径,我正在使用 SetVirtualHostNameToFolderMapping
这是代码
await webView.EnsureCoreWebView2Async(); // ensure the CoreWebView2 is created
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(
"appassets", "Local", CoreWebView2HostResourceAccessKind.Allow);
webView.Source = new Uri("http://appassets/RichText.html");
这是我的 app.exe 文件的位置
C: \Users\xxxx\source\repos\MyNotices\bin\Debug\net6.0-windows\MyNotices.exe.
我收到此错误消息 - System.IO.DirectoryNotFoundException:'The system cannot find the path specified. (0x80070003)'。任何帮助将不胜感激
您的示例假设文件 Local/RichText.html
位于 .exe
的输出文件夹中,即在 C:\Users\xxxx\source\repos\MyNotices\bin\Debug\net6.0-windows\Local\RichText.html
.
中
来自docs:
For example, after calling SetVirtualHostNameToFolderMapping("appassets.example", "assets", CoreWebView2HostResourceAccessKind.Deny);
, navigating to https://appassets.example/my-local-file.html
will show content from my-local-file.html in the assets subfolder located on disk under the same path as the app's executable file.
因此,将 Local/RichText.html
文件添加到 Visual Studio 中的项目并将其 Build Action
属性 设置为 Content
并将其 Copy to Output Directory
属性 到 Copy if newer
.
如果文件位于应用程序的输出目录之外,您应该使用绝对路径来访问它。相对路径是指.exe
.
文件夹内的文件
我正在开发一个 WPF 项目(Visual Studio 2022 和 Net 6.0)。我的项目 (MyNotices) 的文件夹中有本地 html 文件。我在 xaml 代码中有 WebView2,如下所示
<DockPanel Width="1200" Height="600" Visibility="Visible" x:Name="web1">
<wv2:WebView2 x:Name="webView" Width="{Binding ElementName=CurrentPresenter, Path=ActualWidth}"
Height="{Binding ElementName=CurrentPresenter, Path=ActualHeight}" Source=""/>
</DockPanel>
我想将 webview 的源映射到本地 html 文件。如果我使用 html 文件的绝对路径,效果很好,如下所示
await webView.EnsureCoreWebView2Async();
webView.Source = new Uri("/C:/Users/xxxx/source/repos/MyNotices/Local/RichText.html");
我想使用相对路径,我正在使用 SetVirtualHostNameToFolderMapping 这是代码
await webView.EnsureCoreWebView2Async(); // ensure the CoreWebView2 is created
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(
"appassets", "Local", CoreWebView2HostResourceAccessKind.Allow);
webView.Source = new Uri("http://appassets/RichText.html");
这是我的 app.exe 文件的位置 C: \Users\xxxx\source\repos\MyNotices\bin\Debug\net6.0-windows\MyNotices.exe.
我收到此错误消息 - System.IO.DirectoryNotFoundException:'The system cannot find the path specified. (0x80070003)'。任何帮助将不胜感激
您的示例假设文件 Local/RichText.html
位于 .exe
的输出文件夹中,即在 C:\Users\xxxx\source\repos\MyNotices\bin\Debug\net6.0-windows\Local\RichText.html
.
来自docs:
For example, after calling
SetVirtualHostNameToFolderMapping("appassets.example", "assets", CoreWebView2HostResourceAccessKind.Deny);
, navigating tohttps://appassets.example/my-local-file.html
will show content from my-local-file.html in the assets subfolder located on disk under the same path as the app's executable file.
因此,将 Local/RichText.html
文件添加到 Visual Studio 中的项目并将其 Build Action
属性 设置为 Content
并将其 Copy to Output Directory
属性 到 Copy if newer
.
如果文件位于应用程序的输出目录之外,您应该使用绝对路径来访问它。相对路径是指.exe
.