Как проверить наличие обновлений ajax с помощью элемента управления WebBrowser в .net 2.0? - PullRequest
4 голосов
/ 11 ноября 2008

У меня есть веб-страница, которая отображается в приложении winform с помощью элемента управления WebBrowser. Мне нужно выполнить событие, когда HTML на веб-странице меняется; Тем не менее, я не могу найти событие, которое запускается для ситуаций, когда страницы обновляются через Ajax. События DocumentComplete, FileDownloaded и ProgressChanged не всегда инициируются запросами Ajax. Единственный способ решить эту проблему - опросить объект документа и найти изменения; Однако я не думаю, что это очень хорошее решение.

Есть ли еще одно событие, которое мне не хватает, которое будет вызвано обновлением ajax или другим способом решения проблемы?

Я использую C # и .net 2.0

1 Ответ

3 голосов
/ 28 ноября 2008

Я использую таймер и просто наблюдаю за изменением содержимого определенных элементов.

Private AJAXTimer As New Timer

Private Sub WaitHandler1(ByVal sender As Object, ByVal e As System.EventArgs)
    'Confirm that your AJAX operation has completed.
    Dim ProgressBar = Browser1.Document.All("progressBar")
    If ProgressBar Is Nothing Then Exit Sub

    If ProgressBar.Style.ToLower.Contains("display: none") Then
        'Stop listening for ticks
        AJAXTimer.Stop()

        'Clear the handler for the tick event so you can reuse the timer.
        RemoveHandler AJAXTimer.Tick, AddressOf CoveragesWait

        'Do what you need to do to the page here...

        'If you will wait for another AJAX event, then set a
        'new handler for your Timer. If you are navigating the
        'page, add a handler to WebBrowser.DocumentComplete
    End If
Exit Sub

Private Function InvokeMember(ByVal FieldName As String, ByVal methodName As String) As Boolean
        Dim Field = Browser1.Document.GetElementById(FieldName)
        If Field Is Nothing Then Return False

        Field.InvokeMember(methodName)

        Return True
    End Function

У меня есть 2 объекта, которые получают обработчики событий, WebBrowser и Timer. Я в основном полагаюсь на событие DocumentComplete в WebBrowser и событие Tick на таймере.

Я пишу обработчики DocumentComplete или Tick для каждого требуемого действия, и каждый обработчик будет обычно сам RemoveHandler, поэтому успешное событие будет обработано только один раз. У меня также есть процедура RemoveHandlers, которая удалит все обработчики из браузера и таймера.

Мои команды AJAX обычно выглядят так:

AddHandler AJAXTimer.Tick, AddressOf WaitHandler1
InvokeMember("ContinueButton", "click")
AJAXTimer.Start

Мои команды навигации, такие как:

AddHandler Browser1.DocumentComplete, AddressOf AddSocialDocComp
Browser1.Navigate(NextURL) 'or InvokeMember("ControlName", "click") if working on a form.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...