我必须维护一个旧的Windows VB6项目的一部分(所以,不要告诉我将它迁移到VB.NET)。该程序嵌入了众所周知的webbrowser控件(IE),它在其中加载本地HTML文件(包含不同的统计信息,但无关紧要)。知道我们不想在Web浏览器视图中使用任何滚动条(即使HTML页面比webbrowser窗口长,我们只需要查看它的顶部),我们在DocumentComplete事件上管理DOM,如下所示:
Private Sub wb_DocumentComplete(ByVal pDisp As Object, URL As Variant)
wb.Document.documentElement.Style.overflow = "hidden"
ProcessWithDStats
End Sub
所有声音都正确,垂直滚动条很好消失,但是现在,我需要在ProcessWithDStats子中添加一些东西(一个调用很多函数的大子),这需要确保以前的DOM操作完全完成(I意思是:隐藏滚动条,并根据滚动条的新宽度重新对齐内容。
那么,怎么办?
此时,在DOM管理真正完成渲染之前执行ProcessWithDStats!
到目前为止,这是我的尝试:
我尝试在两行之间添加一个滚动条测试(比较文档宽度和浏览器客户端区域一),但它不起作用:测试没问题,但文本重排(因为这个改变)滚动条消失时的宽度)在ProcessWithDStats启用之前没有足够的时间应用。
我尝试过Sleep(),但它会锁定整个程序(包括webbrowser渲染)
有没有办法在这个WebBrowser控件中等待给定DOM管理的实际应用?
我的意思是:
Do
Doevents
Loop Until [DOM modification and rendering completed]
答案 0 :(得分:0)
你需要做到这一点......至少。
Do
Sleep 100
Doevents
Loop Until wb.Busy = False And wb.ReadyState = 4
在您的版本上,.Busy可能会被调用.IsBusy但也是一样的。
此外,如果您想真正了解浏览器是否已完成加载,还应阅读其他一些内容,如果您想了解更多内容,或者需要比上述内容更精确,请阅读我之前的一些答案,但我还有什么为您提供的肯定是比您现有的更好的解决方案。如果你需要它可以在100%的网站上工作,或者只是选择少数网站,请告诉我,如果只选择少数这种简单的方法就足够了。
无论如何,请告诉我,欢呼。