2011-07-18 60 views
1

我有這個問題:我需要能夠捕獲在我在Visual Basic webBrowser控件中加載的頁面中DOM元素的更改。通常在Firefox的JavaScript中,我會這樣做:element [0] .childNodes [1] .addEventListener(「DOMAttrModified」,functionX,true);其中元素[0]是我需要監視的元素,而child [1]是此元素的第二個子元素,其文本值發生了變化,我需要在變化時捕獲它,而functionX是我想要的函數/子元素每當元素[0] .childNodes [1]發生更改時觸發。JS eventListener在VB 2010中相當於

我可以在JavaScript中輕鬆完成這項工作,但我在Visual Basic 2010中用一個瀏覽器控件實現這個功能非常糟糕。

我知道有一些像Dim del As New EventHandler(AddressOf Me.CallGlobalJSMethod)但我很難實現這個實際上。有沒有人有任何想法如何實際上可以做到這一點?

更新:我在VB2010中的Web瀏覽器控件中打開一個頁面,如下所示:WebBrowser1.Navigate(address.Text)然後監視頁面。 在此網頁上有一個ID爲「ctrlid」的文本字段。此控件的文本屬性會定期更改。我需要在發生變化並對其做出反應時趕上事件。

+0

需要進一步澄清你想要做的事情。 –

+0

Paulo,請參閱我的更新。謝謝。 – John

+0

3周前我問過這個問題。我確實在弄清楚了答案,並在這裏記錄下來,以防其他人需要幫助。 – John

回答

2

3周前問過這個問題。我確實在弄清楚了答案,並在這裏記錄下來,以防其他人需要幫助。問題出在OnChange事件。正確的事件觸發方法是OnPropertyChange,用於瀏覽器控件以觸發導航到頁面上託管的元素的更改事件。這是我從一個不同的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 

,然後在那裏被處理的「激發」事件獨立的子過程:

Private Sub SomethingChanged(ByVal sender As Object, ByVal e As EventArgs) 
     'MsgBox("Event was captured!") 
     Console.WriteLine(Now.ToLongTimeString & ":" & "Changed") 
End Sub