如何等待DOM操作完成?

时间:2012-02-28 13:59:00

标签: dom vb6 browser

我必须维护一个旧的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]

1 个答案:

答案 0 :(得分:0)

你需要做到这一点......至少。

Do
 Sleep 100
 Doevents
Loop Until wb.Busy = False And wb.ReadyState = 4

在您的版本上,.Busy可能会被调用.IsBusy但也是一样的。

此外,如果您想真正了解浏览器是否已完成加载,还应阅读其他一些内容,如果您想了解更多内容,或者需要比上述内容更精确,请阅读我之前的一些答案,但我还有什么为您提供的肯定是比您现有的更好的解决方案。如果你需要它可以在100%的网站上工作,或者只是选择少数网站,请告诉我,如果只选择少数这种简单的方法就足够了。

无论如何,请告诉我,欢呼。