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

708
Visualizações
comunicación bidireccional entre c # y JS usando webview2

Estoy usando un control webview2 en una aplicación winforms. Uso mensajes para comunicarme entre C# y Javascript.

  • window.chrome.webview.addEventListener / window.chrome.webview.postMessage en Javascript
  • evento .CoreWebView2.WebMessageReceived y método CoreWebView2.PostWebMessageAsString en C#

La comunicación funciona PERO solo después de que la página en webview2 se haya actualizado de alguna manera. JS siempre ignora/no recibe el primer mensaje enviado por C#. Los mensajes posteriores se reciben y procesan correctamente.

Mi código de interfaz de usuario:

 public GUI() { InitializeComponent(); browser.Source = new Uri(System.IO.Path.GetFullPath("HTML/ui.html")); InitializeAsync(); } async void InitializeAsync() { await browser.EnsureCoreWebView2Async(null); browser.CoreWebView2.WebMessageReceived += MessageReceived; } void MessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs args) { String content = args.TryGetWebMessageAsString(); if (content.StartsWith("getData")) { ReadDataFromCATIA(); var serializerSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects }; string jsonRootNode = JsonConvert.SerializeObject(this.RootNode, Formatting.Indented, serializerSettings); //here I've got the message I want to post //String input = args.TryGetWebMessageAsString(); //MessageBox.Show("string from JS: " + input); browser.CoreWebView2.PostWebMessageAsString(jsonRootNode); } else //object received { ProductNode received = JsonConvert.DeserializeObject<ProductNode>(content); MessageBox.Show(received.PartNumber + " received"); } }

y mi JS en ui.html

 window.chrome.webview.addEventListener('message', event => { alert(event.data); WriteDataFromCsharp(event.data); }); function WriteDataFromCsharp(data) { var target = document.getElementById('target'); if (target === null) { alert('target not found') }; //alert(target.id); //target.textContent = event.data; rootNode = JSON.parse(data); target.innerHTML = addTable(rootNode); //addTable create an HTML table from the deserialized object rootNode } function RequestData() { //function triggered by a button on the html page //alert('post to c#'); window.chrome.webview.postMessage('getData'); }

Hasta ahora, he intentado:

  • asegúrese de que el javascript esté lo más tarde posible en la página (diferir, al final del cuerpo). Sin cambios.
  • inyecta el javascript en la página después de que se haya cargado usando .CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(jsCode). Mismo comportamiento.
  • inyecte el javascript después de que se haya activado el evento NavigationCompleted. mismo comportamiento.

¿Qué echo de menos?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Finalmente encontré al culpable: en mi página HTML, he usado un "enviar" en lugar de un "botón". Con

 <input type="button" value="Load data from V5" onclick="RequestData()" />

El comportamiento de la página es el esperado.

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