Как я могу различать SHDocVw.InternetExplorer и SHDocVw.WebBrowser_v1 с VB.NET?

У меня есть приложение WPF с функцией перебора открытых веб-страниц IE (да, мы все еще используем IE) и очистки данных из HTML. Иногда пользователи получают сообщение об ошибке "Имя открытого члена типа WebBrowswer_V1 не найдено", за которым следует "Невозможно преобразовать COM-объект типа" System._ComObject "в тип интерфейса" mshtml.HTMLDocument "..." Я не найти слишком много ответов на вопрос, почему окна IE иногда будут отображаться как "WebBrowser_V1", а не "Internet Explorer". На данный момент единственное решение, которое мы нашли, - это закрыть все экземпляры IE и перезапустить приложение, а если это не сработает, перезагрузить компьютер. Мне не удалось воспроизвести ошибку при отладке. Может ли кто-нибудь помочь в понимании того, как я могу решить эту проблему?

    Public Function loadKeyIDs() As DataTable
    Dim dt As New DataTable
    dt.Columns.Add("keyid")
    dt.Columns.Add("clientAcct")
    dt.Columns.Add("clientName")
    dt.Columns.Add("legalEntity")
    dt.Columns.Add("vendor")
    Dim shellWins As New SHDocVw.ShellWindows
    Dim explorer As SHDocVw.InternetExplorer
    Try
        For Each explorer In shellWins
            If isEformTracking(explorer) Then
                Dim x As HTMLDocument = explorer.Document
                Dim cm As HTMLInputElement = x.getElementsByName("grkeyid")(0)
                If Not cm Is Nothing Then
                    Dim y As eFormValues = collectClientInfoAbbreviated(x)
                    dt.Rows.Add(y.keyid, y.clientAcct, y.clientName, y.legalEntity, y.vendor)
                End If
            End If
        Next
    Catch ex As Exception
        Dim st As New StackTrace(True)
        st = New StackTrace(ex, True)
        Dim msg As String = ex.Message + " {Stack trace: " + st.GetFrame(0).GetFileLineNumber().ToString + "}"
        MsgBox("An error has occurred when trying to collect open eForm Tracking pages. Please relay this information to support: " & msg)
    Finally
        shellWins = Nothing
        explorer = Nothing
    End Try
    Return dt
End Function

Public Function isEformTracking(ie As SHDocVw.InternetExplorer) As Boolean
    Dim ret As Boolean = False
    If ie.Application.name <> "Internet Explorer" Then
        ret = False
        GoTo ExitSub
    End If

    If ie.ReadyState <> 4 Then
        ret = False
        GoTo ExitSub
    End If

    If Not ie.LocationURL Like "*eforms*" And Not ie.LocationURL Like "*qdcws0726*" And Not ie.LocationURL Like "*qdcws0738*" Then
        ret = False
        GoTo ExitSub
    End If

    If ie.LocationURL Like "*eforms*" Or ie.LocationURL Like "*qdcws0726*" And Not ie.LocationURL Like "*qdcws0738*" Then
        If ie.LocationURL Like "*sales*" Then
            ret = False
            GoTo ExitSub
        End If
    End If

    Dim doc As HTMLDocument = ie.Document
    Dim keyIDelem As HTMLInputElement = doc.getElementsByName("grkeyid")(0)

    If keyIDelem Is Nothing Then
        ret = False
        GoTo ExitSub
    End If

    If Len(keyIDelem.value) > 0 Then
        ret = True
        GoTo ExitSub
    End If
ExitSub:
    Return ret

End Function

0 ответов

Другие вопросы по тегам