Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
WebView2 (WPF): cargue el sitio web desde la carpeta local y llame a la función C # y llame a la función JS

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:

  1. ¿Es esto webView.CoreWebView2.Navigate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Website"); correcto para cargar un sitio web desde una carpeta local?
  2. ¿Cómo llamaría a una función JavaScript y le pasaría un objeto C# desde un método C#?
  3. ¿Cómo llamaría a una función de C# desde el script de JavaScript?

¿Es esto posible?

Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Uso del URI del archivo

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.

Uso de un URI HTTPS virtual

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.

Alojar objetos en script

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.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda