我有这个问题:我需要能够在我在Visual Basic webBrowser控件中加载的页面中捕获DOM元素中的更改。通常在Firefox的JavaScript中,我会这样做:element [0] .childNodes [1] .addEventListener(“DOMAttrModified”,functionX,true);其中element [0]是我需要监视的元素,child [1]是这个元素的第二个子元素,它的文本值已经改变,我需要在它改变时捕获,而functionX是我想要的函数/ sub每当元素[0] .childNodes [1]发生变化时触发。
我可以在JavaScript中轻松完成这项工作,但我在Visual Basic 2010中实现这一点的时间非常糟糕,我在用于实现浏览器的webbrowser控件中。
我知道有一些类似Dim del As New EventHandler(AddressOf Me.CallGlobalJSMethod)但我实际上很难实现这个。有谁知道如何实际做到这一点?
更新:我在VB2010的webbrowser控件中打开一个页面,如下所示:WebBrowser1.Navigate(address.Text)然后监视页面。 在此网页上有一个ID为“ctrlid”的文本字段。此控件的文本属性会定期更改。我需要在变化时捕捉事件并对其作出反应。
答案 0 :(得分:2)
我在3周前问过这个问题。我确实找到了答案,我在这里记录,以防其他人需要帮助。问题出在OnChange
事件上。正确的事件触发器方法是OnPropertyChange
,以便webbrowser控件在其导航到页面上托管的元素的更改时触发事件。这是一个工作示例,我从不同的VB论坛粘贴,在那里我问同样的问题并最终确定答案:
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim doc As HtmlDocument = WebBrowser1.Document
Dim aC As HtmlElement = doc.GetElementById("previewclock")
Try
If aC Is Nothing Then Return
aC.AttachEventHandler("onpropertychange", AddressOf SomethingChanged)
Catch
End Try
然后是一个单独的子例程,其中处理'fired'事件:
Private Sub SomethingChanged(ByVal sender As Object, ByVal e As EventArgs)
'MsgBox("Event was captured!")
Console.WriteLine(Now.ToLongTimeString & ":" & "Changed")
End Sub