等待网页在WebBrowser Delphi中完全加载

等待网页在WebBrowser Delphi中完全加载,delphi,Delphi,当我按代码浏览时,我正在使用下面的代码等待页面完全加载,这非常有效,但当我单击页面中的链接时,如果页面包含框架,则会触发WebBrowser1DocumentComplete或WebBrowser1NavigateComlete2事件数次 我想能够等待页面加载完全当我点击链接,但我不知道如何 WebBrowser1.导航(URL); 重复 Application.ProcessMessages; 睡眠(0); 直到WebBrowser1.ReadyState=ReadyState\u完成; 首先

当我按代码浏览时,我正在使用下面的代码等待页面完全加载,这非常有效,但当我单击页面中的链接时,如果页面包含框架,则会触发
WebBrowser1DocumentComplete
WebBrowser1NavigateComlete2
事件数次

我想能够等待页面加载完全当我点击链接,但我不知道如何

WebBrowser1.导航(URL);
重复
Application.ProcessMessages;
睡眠(0);
直到WebBrowser1.ReadyState=ReadyState\u完成;

首先,您根本不应该使用这样的循环,您应该使用
TWebBrowser.OnDocumentComplete
事件来检测文档何时准备就绪

其次,在HTML中使用框架时,在NavigateComplete2上获取多个
OnDocumentComplete
/
事件是预期的行为。每个帧都有一个事件,从主窗口得到最后一个事件

此行为记录在MSDN上:

当文档已完全加载且
READYSTATE
属性已更改为
READYSTATE\u COMPLETE
时,WebBrowser控件将触发
DocumentComplete
事件。以下是关于此次事件触发的一些要点

  • 在没有帧的页面中,此事件在加载完成后激发一次
  • 在加载多个帧的页面中,此事件针对触发了
    downloadbeagin
    事件的每个帧触发
  • 此事件
    pDisp
    参数与触发此事件的帧的
    IDispatch
    接口指针相同
  • 在加载过程中,最高级别的帧(不一定是顶级帧)触发最终的
    DocumentComplete
    事件。此时,
    pDisp
    参数与最高级别帧的
    IDispatch
    接口指针相同
甚至在Embarcadero的DocWiki中:

编写一个
OnDocumentComplete
事件处理程序,以便在框架或文档完全加载到Web浏览器时执行特定操作。对于没有框架的文档,此事件在文档完成加载时发生一次。在包含多个帧的文档中,此事件对每个帧发生一次。当多帧文档完成加载时,Web浏览器最后一次触发事件


因此,在
TWebBrowser.OnDocumentComplete
中,您需要检查
pDisp
参数以查看它是否是主文档的
IDispatch

首先,您不应该使用这样的循环,您应该使用
TWebBrowser.OnDocumentComplete
事件来检测文档何时准备就绪

其次,在HTML中使用框架时,在NavigateComplete2上获取多个
OnDocumentComplete
/
事件是预期的行为。每个帧都有一个事件,从主窗口得到最后一个事件

此行为记录在MSDN上:

当文档已完全加载且
READYSTATE
属性已更改为
READYSTATE\u COMPLETE
时,WebBrowser控件将触发
DocumentComplete
事件。以下是关于此次事件触发的一些要点

  • 在没有帧的页面中,此事件在加载完成后激发一次
  • 在加载多个帧的页面中,此事件针对触发了
    downloadbeagin
    事件的每个帧触发
  • 此事件
    pDisp
    参数与触发此事件的帧的
    IDispatch
    接口指针相同
  • 在加载过程中,最高级别的帧(不一定是顶级帧)触发最终的
    DocumentComplete
    事件。此时,
    pDisp
    参数与最高级别帧的
    IDispatch
    接口指针相同
甚至在Embarcadero的DocWiki中:

编写一个
OnDocumentComplete
事件处理程序,以便在框架或文档完全加载到Web浏览器时执行特定操作。对于没有框架的文档,此事件在文档完成加载时发生一次。在包含多个帧的文档中,此事件对每个帧发生一次。当多帧文档完成加载时,Web浏览器最后一次触发事件

因此,在
TWebBrowser.OnDocumentComplete
中,您需要检查
pDisp
参数以查看它是否是主文档的
IDispatch