Winui 3 中的 WebView2:如何加载嵌套在应用程序中的本地 HTML 文件

2024-06-20

我正在寻找一种用某种 Windows 应用程序包装我的 Ionic/Angular 应用程序的方法。我正在研究 Electron(并且有问题),但也在调查我是否刚刚创建了自己的 WinUI3 应用程序并使用了 Webview2。

虽然这是 Ionic/Angular,但我认为这适用于任何本地 HTML 文件。

如果我使用对 HTML 文件的绝对引用,我可以加载它,例如

MyWebView.CoreWebView2.Navigate("file:///D:/0/www/index.html");

(然后我收到 CORS 错误,但我有一个单独的帖子 https://stackoverflow.com/questions/70503083/webview2-in-winui-3-cors-errors-when-loading-an-ionic-angular-application-from)

但是,我希望我的文件嵌入到应用程序中,例如添加一个www文件夹下的资产,然后我尝试MyWebView.CoreWebView2.Navigate("ms-appx-web:///www/index.html");,但我收到以下错误:

无法启动“ms-appx-web:///www/index.html”,因为该方案没有注册处理程序。

这是我的示例应用程序:

    namespace WinUI3_1
    {
        /// <summary>
        /// An empty window that can be used on its own or navigated to within a Frame.
        /// </summary>
        public sealed partial class MainWindow : Window
        {
            public MainWindow()
            {
                this.InitializeComponent();
                try
                {
                    //MyWebView.Source = new Uri("ms-appx-web:///assets/www/index.html");
                    Init();        
                }
                catch (Exception ex)
                {       
                    int i = 0;
                }     
            }

            private async void Init()
            {
                try
                {
                    await MyWebView.EnsureCoreWebView2Async();
                    MyWebView.CoreWebView2.Navigate("file:///D:/0/www/index.html");
                    //MyWebView.CoreWebView2.Navigate("ms-appx-web:///www/index.html");
                    MyWebView.CoreWebView2.OpenDevToolsWindow();
                }
                catch (Exception)
                {
                    int i = 0;
                }      
            }   
        }
    }

正如我上面尝试的那样,如何在本地引用该文件?


我找到了一种至少可以加载应用程序的方法。

看着这个帖子 https://stackoverflow.com/questions/67476531/webview2-access-the-virtual-host and 本文档 https://learn.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2.setvirtualhostnametofoldermapping?view=webview2-dotnet-1.0.1054.31,我可以执行以下操作...

 await MyWebView.EnsureCoreWebView2Async();

 MyWebView.CoreWebView2.SetVirtualHostNameToFolderMapping(
     "appassets", "assets", CoreWebView2HostResourceAccessKind.Allow);
    
 MyWebView.Source = new Uri("http://appassets/www/index.html");
 MyWebView.CoreWebView2.OpenDevToolsWindow();

现在找到了 index.html 并且加载它时没有 CORS 问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Winui 3 中的 WebView2:如何加载嵌套在应用程序中的本地 HTML 文件 的相关文章

随机推荐