【问题标题】:How wait for TWebBrowser is loaded in FOR ... TO ... DO?如何在 FOR ... TO ... DO 中等待 TWebBrowser 加载?
【发布时间】:2012-08-09 18:06:46
【问题描述】:

我有这个代码:

    for i:=0 to Memo1.Lines.Count-1 do
       begin
           while WebBrowser1.Busy do Application.ProcessMessages;
           WebBrowser1.OleObject.Document.Links.item(cat[i]).click;
           subcatList;
       end;

但是 WebBrowser1 运行了几次,尽管程序的期望值。如何不在后台启动 WebBrowser1 或者解决方案是什么?

【问题讨论】:

  • 您能否详细说明 WebBrowser1 运行了几次 ?什么程序?您是说某个事件还是您发布的代码在哪里?请花时间更新您的问题,因为目前无法回答。
  • 我在 WebBrowser 的加载页面上有一个链接,需要在 FOR 循环中单击每个链接,然后等到完成处理第一个链接。在 Memo1.Lines 我有一些链接。 subcatlist thiы 是这样的代码。Оn 网站几类投资,我收集所有附件

标签: delphi


【解决方案1】:

需要实现TWebBrowser、BeforeNavigate2、DocumentComplete、NavigateComplete2这3个事件

    TForm1 = class(TForm)
    private
      CurDispatch: IDispatch; 
      FDocLoaded: Boolean;    
    ....


    procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
      const URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
      var Cancel: WordBool);
    begin
      CurDispatch := nil;
      FDocLoaded := False;
    end;

    procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch;
      const URL: OleVariant);
    begin
      if (pDisp = CurDispatch) then  
      begin
        FDocLoaded := True;
        CurDispatch := nil;
      end;
    end;

    procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject; const pDisp: IDispatch;
      const URL: OleVariant);
    begin
      if CurDispatch = nil then
        CurDispatch := pDisp;
    end;

现在您可以使用 FDocLoaded 变量来了解页面是否已加载到 WebBrowser

    WebBrowser1.Navigate('www.stackoverflow.com');
    repeat Application.ProcessMessage until FDocLoaded;

问候

【讨论】:

  • Application.ProcessMessage 还是 Application.ProcessMessages?
  • @TLama 这个解决方案在带有框架的页面上起作用?
  • 请注意,OnDocumentComplete 事件处理程序仅在显示TWebBrowser 控件时执行(例如,如果将其放置在非活动选项卡中,它将仅在选项卡激活时执行)
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多