Intenté usar el evento JavascriptMessageReceived en C# para manejar CefSharp.PostMessage llamado desde JS dentro del navegador. Incluso descargué un ejemplo de este trabajo desde el enlace . Ejecuté un ejemplo que se suponía que debía hacer exactamente lo que necesitaba, pero no funcionó, ni tampoco mi código (a continuación). ¿CefSharp eliminó esta funcionalidad o la cambió? ¿Necesito habilitar esta característica dentro de CefSettings o ChromiumWebBrowser?
using CefSharp; using CefSharp.WinForms; public ChromiumWebBrowser chromeBrowser; public Form1() { InitializeComponent(); string curDir = Directory.GetCurrentDirectory(); CefSettings settings = new CefSettings(); Cef.Initialize(settings); chromeBrowser = new ChromiumWebBrowser(String.Format("file:///{0}/HelloWorld.html", curDir)); chromeBrowser.JavascriptMessageReceived += ChromeBrowser_JavascriptMessageReceived; } private void ChromeBrowser_JavascriptMessageReceived(object sender, JavascriptMessageReceivedEventArgs e) { MessageBox.Show((string)e.Message); }HolaMundo.html aquí
<!DOCTYPE html> <html> <body> <script> CefSharp.PostMessage("Hello world!"); </script> </body> </html>CefSharp.PostMessage("Hello world!"); es una extensión JS bastante nueva de 2020. Asegúrese de estar utilizando el CefSharp real. chromeBrowser = new ChromiumWebBrowser(String.Format("file:///{0}/HelloWorld.html", curDir)); chromeBrowser.JavascriptMessageReceived += ChromeBrowser_JavascriptMessageReceived; La suscripción a los eventos JavascriptMessageReceived es demasiado tarde, la página podría descargarse y JS podría ejecutarse en ese momento. Debe suscribirse a los eventos antes de cargar la página. chromeBrowser = new ChromiumWebBrowser("about:blank"); chromeBrowser.JavascriptMessageReceived += ChromeBrowser_JavascriptMessageReceived; chromeBrowser.Load(String.Format("file:///{0}/HelloWorld.html", curDir));¿Dónde está agregando ChromiumWebBrowser al formulario? El control WinForms ChromiumWebBrowser no se cargará hasta que se cree su identificador, lo que ocurre de manera predeterminada cuando se agrega a un elemento primario.
chromeBrowser = new ChromiumWebBrowser(String.Format("file:///{0}/HelloWorld.html", curDir)); chromeBrowser.JavascriptMessageReceived += ChromeBrowser_JavascriptMessageReceived; Controls.Add(chromeBrowser);