Vb.net 第一次加载后使用getElementById时出现异常0x800A01B6
我已使用visual studio XML功能区为Powerpoint创建了一个功能区。此功能区有一个按钮,简化后可执行以下操作: 打开IE浏览器 按id搜索代码中的元素hiddenfield 获取此元素的值 打印实际幻灯片中的值 在我第一次单击功能区的按钮时,它工作正常,但在我单击按钮后,它会引发异常0x800A01B6 这是我单击按钮时执行的代码: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.Application
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对象,并查看其是否有效:DirectCastie.Document、IHTMLDocument3.getElementByIdhdnstring。您也不应该调用Application.DoEvents。相反,在这种情况下,使用。
Dim hdnstring As HTMLInputElement = ie.Document.getElementById("hdnstring")
DirectCast(ie.Document, IHTMLDocument3).getElementById("hdnstring")