Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: matti en 22 Noviembre 2015, 13:29 pm



Título: CONSULTA
Publicado por: matti en 22 Noviembre 2015, 13:29 pm
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:


Título: Re: CONSULTA
Publicado por: Eleкtro en 23 Noviembre 2015, 12:49 pm
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

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:

  • HtmlElement Class - MSDN (http://msdn.microsoft.com/en-us/library/system.windows.forms.htmlelement%28v=vs.110%29.aspx)

(http://i.imgur.com/cMmpVtW.png)

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

Código
  1. Public Class Form1 : Inherits Form
  2.  
  3.    ReadOnly url As String = "http://foro.elhacker.net/login.html/"
  4.  
  5.    Private Sub Form1_Shown() Handles MyBase.Shown
  6.  
  7.        With Me.WebBrowser1
  8.            .ScriptErrorsSuppressed = True
  9.            .Navigate(Me.url)
  10.        End With
  11.  
  12.    End Sub
  13.  
  14.    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) _
  15.    Handles WebBrowser1.DocumentCompleted
  16.  
  17.        If (e.Url.AbsoluteUri = Me.url) Then
  18.  
  19.            Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
  20.            Dim el As HtmlElement = wb.Document.Forms(elementId:="frmLogin")
  21.  
  22.            If (el IsNot Nothing) Then
  23.                el.AttachEventHandler("onsubmit", New EventHandler(AddressOf Me.FrmLogin_OnSubmit))
  24.  
  25.            Else
  26.                Throw New Exception(message:="Element not found.")
  27.  
  28.            End If
  29.  
  30.        End If
  31.  
  32.    End Sub
  33.  
  34.    Private Sub FrmLogin_OnSubmit(ByVal sender As Object, ByVal e As EventArgs)
  35.  
  36.        MessageBox.Show("Form submitted.", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
  37.  
  38.    End Sub
  39.  
  40. End Class

Saludos


Título: Re: CONSULTA
Publicado por: matti en 26 Noviembre 2015, 21:41 pm
Sí justo  estaba implementando ese metodo también y me funciono . gracias por la respuesta