如何确定触发OnLoadEnd的加载页面对应于LoadString的HTML?

时间:2012-08-23 12:42:18

标签: delphi chromium onload-event

当我发出

Chromium.Browser.MainFrame.LoadString(HTML,'code_url');

似乎OnLoadEnd事件有时仍会加载我之前的LoadString的HTML(可能会分别加载几个帧)。

我正在使用

if not frame.IsMain then
  Exit;

确保只在OnLoadEnd中考虑主框架,但有时候CefGetBitmap会返回先前加载的页面(HTML)的位图。

我的问题:当ChromiumFMX组件已经显示正确的页面时,如何知道OnLoadEnd被触发?

2 个答案:

答案 0 :(得分:0)

当HTML非常简洁(小)时,它会非常快速地加载,并且在更新ChromiumFMX组件之前会触发OnLoadEnd事件。 要处理ChromiumFMX内容,请等到OnLoadEnd过程完成。例如,这可以通过等待它在循环中完成来实现。

procedure TfrmChromiumThumbnailing.ChromiumLoadEnd(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  httpStatusCode: Integer; out Result: Boolean);
begin
  if (frame <> nil) and frame.IsMain then
    PageLoaded := True;
end;

在其他代码中:

PageLoaded := False;
ChromiumFMX.Browser.MainFrame.LoadString(HTML,'code_url');
while not PageLoaded do
  Application.ProcessMessages;
<handle ChromiumFMX content>

答案 1 :(得分:0)

如果你编码这个 ChromiumFMX.Browser.MainFrame.LoadString(HTML,'code_url');

回调程序中的

TfrmChromiumThumbnailing.ChromiumLoadEnd(Sender:TObject;   const浏览器:ICefBrowser; const frame:ICefFrame;   httpStatusCode:整数; out结果:布尔);

frame.url将是'code_url'