目前,我已将 TWebBrowser 嵌入在一个应用程序中,该应用程序“记录”在线游戏中的活动,以便可以向用户显示有关该游戏的统计信息。这目前工作正常,但 TWebBrowser 似乎比 TChromium 慢很多。因此,我开始将我的项目转换为使用 Delphi TChromium 嵌入式框架 (CEF)-3,来自:https ://bitbucket.org/chromiumembedded/
从这里我得到了 guiclient,它可以在下载的 demos 目录中找到。
到目前为止一切顺利 - 但是,在接收到对“crmBrowserLoadEnd”的调用之前,用户似乎可以按下按钮导航离开当前页面。这导致我的程序丢失了数据。
作为替代方案,我认为可以检查哪些资源完成了各自的下载。我可以挂钩事件“crmBrowserBeforeResourceLoad”以查看哪些资源“开始”加载。但似乎没有任何事件可以告诉我资源已完成加载。
procedure TFrmDBrowser.crmBrowserBeforeResourceLoad(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; out Result: Boolean);
var
u: TUrlParts;
Item: TListItem;
begin
item := LvDataView.Items.Add();
item.Caption := request.Url;
end;
所以,归结为:
- 问:我如何要求/告诉 CEF 为已下载的单个资源给我一个事件,以便我可以在下载 index.htm 时阅读它。(而不是等待整个页面和所有资源完成加载)
- 答:使用“crmBrowserLoadStart”而不是“crmBrowserLoadEnd”。为了确保它可以在浏览器开始处理下载的文件之前获取 url。
- 问:在整个文档完成加载并且 crmBrowserLoadEnd 完成之前,如何阻止所有用户输入。(虽然这不太受欢迎,因为它会降低用户对浏览器的享受):
- A:更新:捕获“crmBrowserPreKeyEvent”并添加“if FLoading then Result := True;” 将确保用户无法使用键盘进行导航。设置 crmBrowser.Enabled := False,。将确保用户无法使用鼠标导航。