Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

215
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda