【问题标题】:Creating TWebBrowser in Runtime with Delphi使用 Delphi 在运行时创建 TWebBrowser
【发布时间】:2010-12-30 05:09:45
【问题描述】:

我有一个在运行时创建并在后台使用的 TWebBrowser 对象,即不可见。问题是像 OnDocumentComplete 这样的事件在 Delphi2009 中不起作用或未被触发。有什么建议吗?

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  FWebBrowser:= TWebBrowser.Create(Self);
  FWebBrowser.RegisterAsBrowser:= True;
  FWebBrowser.OnDocumentComplete:= WhenDocIsCompleted;
end;

procedure TfrmMain.WhenDocIsCompleted(ASender: TObject; const pDisp: IDispatch;
  var URL: OleVariant);
begin
  ShowMessage('Doc is completed!');
end;

Navigate 和 Navigate2 之间有什么重要的区别吗?如何在此处启用 cookie?

提前致谢。

【问题讨论】:

  • 不是您问题的真正答案,但是如果您不使用 TWebBrowser 进行显示,为什么还要使用它?使用像 Indy 的 TIdHTTP 这样的 HTTP 客户端组件或使用与 IE 相同设置的 WinInet API 来获取它不会更好。见stackoverflow.com/questions/1823542/…
  • 我使用过 TidHTTP 和 TidCokkieManager,但 cookie 的问题仍然存在,所以我认为 TWebBrowser 是一个解决方案,但经过测试它也有同样的问题。
  • 那么问题是什么?是关于 cookie 还是事件?也许最好将两个问题分开。

标签: delphi runtime twebbrowser


【解决方案1】:
TWinControl(FWebBrowser).Parent := Form1;  // Parent property is read-only unless cast

【讨论】:

    【解决方案2】:

    您可能会遇到此问题,因为 TWebBrowser 在内部与父窗体的句柄紧密协作以获取从窗口发布的消息。尝试使用打开 TWebBrowser 的隐藏表单(也可以选择创建运行时),和/或调查 HandleAllocated 和 HandleNeeded 方法是否可以帮助您。

    【讨论】:

      【解决方案3】:

      调用 OnDocumentComplete 问题:

      WebBrowser1.HandleNeeded;
      

      或者在你的情况下:

      FWebBrowser.HandleNeeded;
      

      在 webBrowser.Navigate 之前

      【讨论】:

        【解决方案4】:

        一个与网页 cookie 完美配合的组件是来自EmbeddedWB 的 TEmbeddedWB,并且是免费的。

        【讨论】:

        • 长时间无法访问 EmbeddedWB 网站。我有源代码,我在 Delphi 2010 中使用,我还改进了一些部分并修复了一些错误。
        【解决方案5】:
        procedure TForm1.ReCreateBrowser();
        begin
            if(WebBrowser <> NIL) then
            begin
               WebBrowser.Stop;
               WebBrowser.Destroy;
            end;
        
            WebBrowser        := TWebBrowser.Create(Form1);
            TWinControl(WebBrowser).Name   := 'WebBrowser';
            TWinControl(WebBrowser).Parent := Form1; //set parent...can be panel, tabs etc
            WebBrowser.Silent := true;  //don't show JS errors
            WebBrowser.Visible:= true;  //visible...by default true
        
            //don't set width/heigh/top/left before TWinControl(WebBrowser).Parent := Form1;
            WebBrowser.Top    := 10;
            WebBrowser.Left   := 10;
            WebBrowser.Height := 600;
            WebBrowser.Width  := 800;
            WebBrowser.OnDocumentComplete  := WebBrowserDocumentComplete;
          //WebBrowser.OnNavigateComplete2 := WebBrowserNavigateComplete2;
        end;
        

        【讨论】:

          猜你喜欢
          • 2018-12-28
          • 1970-01-01
          • 2010-11-03
          • 2013-02-21
          • 1970-01-01
          • 1970-01-01
          • 2012-11-23
          • 2019-05-09
          • 2015-10-23
          相关资源
          最近更新 更多