Как я могу различать 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