es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Webview2 AddHostObjectToScript lanza una excepción lanzada en 0x7901179F.

Tengo una aplicación de prueba de WinUI 3 que utiliza WebView2 donde quiero poder llamar código C# desde el JavaScript alojado.

Siguiendo esta documentación, tengo lo siguiente:

[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class Bridge
{
  public string Func(string param)
  {
   return "Ejemplo: " + param;
  }
}
...

   await MyWebView.EnsureCoreWebView2Async();

    MyWebView.CoreWebView2.SetVirtualHostNameToFolderMapping(
     "appassets", "assets", CoreWebView2HostResourceAccessKind.Allow);

    MyWebView.Source = new Uri("http://appassets/www/index.html");
    MyWebView.CoreWebView2.OpenDevToolsWindow();

    MyWebView.CoreWebView2.AddHostObjectToScript("bridge", new Bridge());

Sin embargo, la llamada a AddHostObjectToScript me arroja el siguiente error:

> Excepción producida en 0x7901179F (Microsoft.Web.WebView2.Core.dll) en WinUI3_1.exe: 0xC0000005: Violación de acceso al leer la ubicación 0x00000000.

Imagen

Actualización 1

Siguiendo la sugerencia de @Poul Bak, agregué mi llamada a NavigationCompleted, pero desafortunadamente no ayudó.

Imagen

También debo agregar que estoy utilizando VS2019, donde agregué el soporte de WinUI3 a través de las extensiones de administración, por lo que espero que mi error no se deba a esto.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la llamada a AddHostObjectToScript. Una posible solución es mover esta llamada al evento NavigationCompleted del control WebView2, de la siguiente manera:

    MyWebView.NavigationCompleted += async (sender, args) =>
    {
        await MyWebView.CoreWebView2.AddHostObjectToScriptAsync("bridge", new Bridge());
    };
    

    Esto asegura que el DOM de la página se haya cargado completamente antes de intentar agregar el objeto Bridge al script. Además, podría valer la pena verificar si el objeto Bridge está marcado correctamente como COM-visible, así como asegurarse de que el control MyWebView esté inicializado correctamente antes de realizar cualquier llamada a sus propiedades o métodos.

Comments are closed.