Estoy haciendo que una aplicación WPF use WebView2.
Habrá un instalador que instalará la aplicación WPF en una carpeta y también descargará y escribirá el sitio web en una subcarpeta del directorio de instalación. Como esto:
Installation Directory ├───Website │ ├───index.css │ └───index.html └───WPF Self Contained EXE WebView2 cargará el sitio web usando esto (creo): webView.CoreWebView2.Navigate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Website");
Esto debería cargar index.html y todos los archivos a los que hace referencia, como index.css .
Ahora mi principal preocupación es cómo llamo a una función de JavaScript desde C#. Hasta ahora, después de buscar en Google, solo he encontrado formas para WebView1. Y no pude encontrar nada acerca de llamar a un método C# desde JavaScript.
Así que tres cosas:
webView.CoreWebView2.Navigate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Website"); correcto para cargar un sitio web desde una carpeta local?¿Es esto posible?
Gracias.
No estoy seguro de si AppDomain.CurrentDomain.BaseDirectory siempre le dará la ruta correcta. Puedes usar algo como lo siguiente:
string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location; string exeFolder = System.IO.Path.GetDirectoryName(exePath); string websiteFolder = Path.Combine(exeFolder, "website"); string htmlPath = Path.Combine(websiteFolder, "index.html"); webView.CoreWebView2.Navigate(htmlPath);Debe incluir la ruta al propio index.html y no solo la carpeta que contiene el index.html.
Normalmente, Navigate debe tomar un URI, pero si proporciona una ruta de archivo de Windows, lo convertirá en un URI de archivo y debería funcionar.
Los URI de archivo tienen algunas limitaciones al intentar incorporar URI de http(s) y otras características de la plataforma web que requieren https.
Si tiene problemas al usar URI de archivos, puede usar CoreWebView2.SetVirtualHostNameToFolderMapping para asignar una ruta de archivo de Windows a un nombre de host HTTPS falso:
string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location; string exeFolder = System.IO.Path.GetDirectoryName(exePath); string websiteFolder = Path.Combine(exeFolder, "website"); webView.CoreWebView2.SetVirtualHostNameToFolderMapping("appassets.example", websiteFolder, CoreWebView2HostResourceAccessKind.DenyCors); webView.CoreWebView2.Navigate("https://appassets.example/index.html");Esto creará un nombre de host falso 'appassets.example' que se asignará a la ruta de su archivo de Windows. Y dado que se trata de URI de HTTPS, no tiene los mismos problemas que con los URI de archivo.
Para sus preguntas 2 y 3, puede usar CoreWebView2.AddHostObjectToScript . La implementación actual de AddHostObjectToScript requiere que sus clases de C# estén especialmente marcadas. Puede verlo en la documentación de AddHostObjectToScript.