2010-11-10 18 views
7

He estado jugando con webkit.net en AC# proyecto victoria formas y amor de lo fácil que es para llamar a funciones de JavaScript desde dentro del programa de C# con:WebKit.NET para llamar a una función de C# desde JavaScript

browser.Document.InvokeScriptMethod("functionName", new object[]{"parameter1", "parameter2"});

Ahora la pregunta es cómo hacer esto al revés ... ¿Hay algún tipo de oyente de eventos que pueda escuchar una llamada a la función javascript o invocar el método aC# a través del JavaScript que se ejecuta en el navegador webkit?

La forma en que lo estoy haciendo en el momento en que usa un hack malo ... echando un vistazo a los escuchas de eventos disponibles, me conecté al evento TitleChanged, y leí el valor de un campo input oculto en el html ... esto es realmente malo y necesita una solución real.

Gracias de antemano, - Greg.

Respuesta

11
public Form1() 
    { 
     InitializeComponent(); 
     webKitBrowser1.Navigating += new WebBrowserNavigatingEventHandler(Form1_Navigating); 
    } 


    private void Form1_Navigating(object sender, WebBrowserNavigatingEventArgs e) 
    { 
     string url = e.Url.ToString(); 
     if (url.IndexOf("app://") > -1) 
     { 
      e.Cancel = true; 
      processRequest(url); 
     } 
    } 

Esto no puede pasar su prueba de Hack feo, pero es un antiguo método de procesar las solicitudes de un navegador integrado .NET. Esencialmente interceptas una solicitud URL GET en el navegador. Si la URL contiene una palabra clave (como la aplicación: //), cancela el GET y procesa los parámetros de la URL. La devolución de un valor se realizó tradicionalmente llamando al método Navigate, sin embargo, utilizando el método que describió en su publicación, puede llamar directamente a una función de JavaScript.

+0

Muy buena implementación. – Greg

5

Hay una bifurcación en github que agrega el soporte para esto con un objeto de scripting (funciona de forma similar al navegador de winforms estándar). Cuando se carga el navegador, puede establecer el objeto de creación de scripts, la clase que manejará sus llamadas js, utilizando webKitBrowser.ObjectForScripting = myObject. Luego, desde js puede llamar al método usando window.external.foo(). Espero que esto ayude.

+0

Supongo que ayudaría si incluí el enlace :) https://github.com/scampy/webkitdotnet – Kevin

+0

¿Alguien puede encontrar una versión compilada de webkitdotnet con esto habilitado? Gracias. –

Cuestiones relacionadas