CONSULTA

Iniciado por matti, 22 Noviembre 2015, 13:29 PM

0 Miembros y 1 Visitante están viendo este tema.

matti

Que tal, quisiera utilizar un método similar al qué dispone javascript  (addeventlistener) pero en c# utilizando webbrowser es decir necesito generar de alguna manera mediante un metodo o evento algo similar a lo que genera la funcion de javascript addeventlistener("submit",mifuncion()); para poder ejecutar mi codigo luego de que se genere un submit en la web en la que estoy. no me sirven eventos como DocumentCompleted. alguna sugerencia ? saludos. :rolleyes:

Eleкtro

#1
Cita de: matti en 22 Noviembre 2015, 13:29 PMnecesito generar de alguna manera mediante un metodo o evento algo similar a lo que genera la funcion de javascript addeventlistener("submit",mifuncion()); para poder ejecutar mi codigo luego de que se genere un submit en la web en la que estoy

Interesante pregunta, se me ocurren varias maneras:

La primera y más tediosa sería utilizar la interfáz IHTMLFormElement de la indocumentada API MSHTML y asignarle la propiedad onsubmit, la cual imagino que aceptará un delegado a un método, ya que no encontré información alguna sobre esto en la MSDN y no inspeccioné más a fondo. Estuve tratando de castear un Web-Form (HtmlElement) sin éxito a dicha interáz, así que desistí, pero teoricamente puedes hacer de todo.

La segunda manera sería inyectar tu propio código escrito en javascript en el documento html, pero como javascript no es lo mio ni lo intenté. Tienes cientos de ejemplos en google sobre como inyectar JS de manera administrada en un HtmlElement.

La tercera y exitosa manera que hallé, fue investigando sobre los métodos de la class HtmlElement, encontré el método AttachEventHandler, que parece hacer exactamente lo que necesitas:




Un ejemplo que hice con el form de login del foro:

Código (vbnet) [Seleccionar]
Public Class Form1 : Inherits Form

   ReadOnly url As String = "http://foro.elhacker.net/login.html/"

   Private Sub Form1_Shown() Handles MyBase.Shown

       With Me.WebBrowser1
           .ScriptErrorsSuppressed = True
           .Navigate(Me.url)
       End With

   End Sub

   Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) _
   Handles WebBrowser1.DocumentCompleted

       If (e.Url.AbsoluteUri = Me.url) Then

           Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
           Dim el As HtmlElement = wb.Document.Forms(elementId:="frmLogin")

           If (el IsNot Nothing) Then
               el.AttachEventHandler("onsubmit", New EventHandler(AddressOf Me.FrmLogin_OnSubmit))

           Else
               Throw New Exception(message:="Element not found.")

           End If

       End If

   End Sub

   Private Sub FrmLogin_OnSubmit(ByVal sender As Object, ByVal e As EventArgs)

       MessageBox.Show("Form submitted.", "", MessageBoxButtons.OK, MessageBoxIcon.Information)

   End Sub

End Class


Saludos








matti

Sí justo  estaba implementando ese metodo también y me funciono . gracias por la respuesta