Vb.net 第一次加载后使用getElementById时出现异常0x800A01B6
我已使用visual studio XML功能区为Powerpoint创建了一个功能区。此功能区有一个按钮,简化后可执行以下操作:Vb.net 第一次加载后使用getElementById时出现异常0x800A01B6,vb.net,getelementbyid,ribbon,Vb.net,Getelementbyid,Ribbon,我已使用visual studio XML功能区为Powerpoint创建了一个功能区。此功能区有一个按钮,简化后可执行以下操作: 打开IE浏览器 通过id搜索代码中的元素(hiddenfield) 获取此元素的值 打印实际幻灯片中的值 在我第一次单击功能区的按钮时,它工作正常,但在我单击按钮后,它会引发异常0x800A01B6 这是我单击按钮时执行的代码: Dim oType As Type = Type.GetTypeFromProgID("InternetExplorer.Applic
- 打开IE浏览器
- 通过id搜索代码中的元素(hiddenfield)
- 获取此元素的值
- 打印实际幻灯片中的值
Dim oType As Type = Type.GetTypeFromProgID("InternetExplorer.Application")
If oType IsNot Nothing Then
Dim ie As SHDocVw.InternetExplorer
ie = Nothing
ie = TryCast(Activator.CreateInstance(oType), SHDocVw.InternetExplorer)
If ie IsNot Nothing Then
Dim oEmpty As Object = [String].Empty
Dim oURL As Object = targetURL
ie.AddressBar = False
ie.MenuBar = False
ie.ToolBar = 0
ie.Visible = True
ie.Height = 800
ie.Width = 1100
ie.Navigate(oURL, oEmpty, oEmpty, oEmpty, oEmpty)
End If
Do While (ie.Busy Or ie.ReadyState <> READYSTATE.READYSTATE_COMPLETE)
Sleep(1000)
Application.DoEvents()
Loop
Sleep(10000) ' 10 seconds for testing purpose
Dim str As String = String.Empty
Dim hdnstring As HTMLInputElement = ie.Document.getElementById("hdnstring")
str = hdnstring.value
DoSomething(str)
ie.Quit()
ie = Nothing
End If
异常为0x800A01B6消息
最奇怪的是,如果我在IE上下文菜单中单击viewsource,而延迟10秒(用于测试的延迟),那么每次单击按钮时,它都能正常工作;但如果我不这样做,就会出现异常0x800A01B6
知道我做错了什么吗
错误详细信息图像:
文档的类型仅在运行时解析,因此在此之前它是一个
对象。这就是为什么调用其中的任何方法都会导致所谓的后期绑定-您还不知道getElementById
方法是否存在,因此必须在运行时确定
您很可能会出现错误,因为文档
不是,这是唯一包含getElementById
方法的文档类型
您可以尝试将文档
强制转换为IHTMLDocument3
界面。由于它继承了IHTMLDocument
和IHTMLDocument2
,因此即使文档实际上是早期类型之一,也可以在它们之间强制转换
DirectCast(ie.Document, IHTMLDocument3).getElementById("hdnstring")
在例外中有更多的文本吗?除了行号以外的任何其他文本例外?除了行号以外的任何其他文本以外的任何其他文本?只有行号以外的行号以外的任何其他文本例外?除了行号以外的任何其他文本以外的任何其他文本?除了行号以外的任何其他文本以外的任何其他文本?只有行号以外的任何其他文本的例外?只有行号以外的任何其他文本的例外?只有行号,它失败的行号的行号,它的行号,它失败的行号,它的行号的行号,它的行号除外的行号,它的行号,它的行号的行号,行号,行号,否则否则的行号,它的行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行号,行a̶i̶l̶s i添加了详细错误的屏幕截图欢迎使用堆栈溢出!文档
属性的类型仅在运行时解析,因此在此之前它是一个对象
(这就是为什么使用所谓的后期绑定,您不知道getElementById
方法是否存在)。您可以尝试将文档
强制转换为IHTMLDocument3
对象,并查看其是否有效:DirectCast(即,Document,IHTMLDocument3).getElementById(“hdnstring”)
。您也不应该调用应用程序.DoEvents()
。相反,在这种情况下,使用。
Dim hdnstring As HTMLInputElement = ie.Document.getElementById("hdnstring")
DirectCast(ie.Document, IHTMLDocument3).getElementById("hdnstring")