我使用visual studio XML功能区为Powerpoint创建了一个功能区。这个功能区有一个按钮,简化了这个:
第一次单击功能区的按钮时,它可以正常工作,但是下次单击按钮时会抛出异常0x800A01B6。
这是我点击按钮时执行的代码:
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
这是打开的网站代码(targetURL),代码在每次加载时保持相同,只有隐藏值发生变化:
<html>
<body>
<form name="form1" id="form1">
<input type="hidden" name="hdnstring" id="hdnstring" value="Get This String" />
</form>
</body>
</html>
第二次(及以下)我执行该功能:IE打开,网站完全加载,等待10秒,然后我收到错误:
Dim hdnstring As HTMLInputElement = ie.Document.getElementById("hdnstring")
带有异常0x800A01B6消息。
最奇怪的是,如果我在IE上下文菜单中点击viewsource而延迟10秒(用于测试目的),每次点击按钮都会完美;但如果我不这样做,则异常0x800A01B6会出现。
知道我做错了什么?
错误详细信息图片:
答案 0 :(得分:1)
Document
属性的类型仅在运行时解析,因此在此之前它是Object
。这就是为什么调用其中的任何方法会导致所谓的后期绑定 - 您还不知道getElementById
方法是否存在,因此必须确定是否为运行时。
您很可能会收到错误,因为Document
不属于IHTMLDocument3
type,这是唯一包含getElementById
方法的文档类型。
您可以尝试将Document
转换为IHTMLDocument3
界面。由于它继承了IHTMLDocument
和IHTMLDocument2
,即使文档实际上是早期类型之一,也可以在它们之间进行转换。
DirectCast(ie.Document, IHTMLDocument3).getElementById("hdnstring")