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

1.1K
Vistas
WebView2: configuración de propiedades de objeto en C# desde código Javascript

Aquí hay un seguimiento de esta pregunta .

Estoy transfiriendo una aplicación WPF de CEFSharp a WebView2. Tengo un HostObject al que se debe acceder desde js en la ventana WebView2. Esto es todo, desmontado.

 using System; using System.Runtime.InteropServices; namespace webview2Demo { [ClassInterface(ClassInterfaceType.AutoDual)] [ComVisible(true)] public class Api { public string Username { get; set; } public string Version = "1.1.1"; public Api() //ctor { } } }

Puedo usar esta línea con éxito en el evento NavigationStarting del control WebView2 para hacer que el objeto sea visible desde Javascript. Hasta aquí todo bien.

 webView.CoreWebView2.AddHostObjectToScript("api", new API());

Puedo recuperar propiedades públicas y miembros como este. Hasta aquí todo bien.

 (async function foo () { const api = chrome.webview.hostObjects.api const ver = await api.Version alert (ver) })();

Mi problema: ¿puedo establecer propiedades como esta de manera confiable, sin ningún tipo de condición de carrera asíncrona o riesgo de interbloqueo? api.Username = 'whoever' Parece funcionar pero no lo he encontrado documentado.

 (async function foo () { const api = chrome.webview.hostObjects.api api.Username = 'whoever' const user = await api.Username alert (user) })();

La documentación dice que HostObject está expuesto a través de Promises. ¿Estoy golpeando al colocador correctamente?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Cuando establece una propiedad en un proxy de JavaScript para un objeto host creado a través de CoreWebView2.AddHostObjectToScript, a diferencia de obtener una propiedad o llamar a un método, la asignación devuelve el mismo valor que se asignó y no una promesa que represente la finalización de esa asignación. La asignación de propiedades genera un mensaje que se envía de vuelta al proceso de la aplicación de host WebView2 y se asignará la propiedad, pero no tendrá la promesa de avisarle cuando esté completa.

establecerHostProperty

Como alternativa, puede usar setHostProperty , un método que realizará la asignación de propiedades y devolverá una promesa que se resolverá cuando se complete la asignación de propiedades.

 (async function foo () { const api = chrome.webview.hostObjects.api await api.setHostProperty('Username', 'whoever'); const user = await api.Username alert (user) })();

Sincronizar proxies

También hay una versión de sincronización de los proxies. En todas partes, un proxy asíncrono devuelve una promesa, el proxy de sincronización bloquea el subproceso de JavaScript en espera de una respuesta del proceso de host de WebView2. Por lo general, no desea bloquear el subproceso de JavaScript en espera de una llamada de proceso cruzado, pero en algunas circunstancias puede ser más práctico o aceptable. Los proxies asíncronos tienen un método de sync que devolverá la versión síncrona del proxy (asincrónicamente).

 (async function foo () { // Note the one await call to get from async proxies to sync proxies const syncHostObjects = await chrome.webview.hostObjects.sync; const api = syncHostObjects.api; api.Username = 'whoever'; const user = api.Username alert (user) })();

Confiando en la cola

Dado que todos los mensajes de proxy de JavaScript viajan en la misma cola y deben manejarse en el mismo subproceso en el proceso de la aplicación de host WebView2, es posible que el uso de un establecedor de propiedades y no esperar a que se complete y luego llamar al captador aún forzará el reciba un mensaje para esperar a que se complete el conjunto y que su código original esté bien.

over 4 years ago · Santiago Trujillo 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