全能开发工程师手册之cef4delphi

一、简介

cef4delphi是一款基于Chromium Embedded Framework(CEP)封装的Delphi组件库,用于在Delphi应用程序中集成嵌入式浏览器。

CEF是基于谷歌Chromium浏览器内核开发的,能够完美支持各种网页特效,同时具有跨平台、高性能、可扩展性和安全性等优点。而CEF在Delphi环境下的应用,需要集成C++代码,编译过程繁琐,在此过程中,cef4delphi作为一款高度封装的Delphi组件库,解决了这些问题,使得Delphi开发者能够更加便捷高效地实现应用程序中嵌入式浏览器功能。

二、监听事件

cef4delphi提供了大量的监听器接口,开发者可以通过实现这些接口来监听浏览器的各种事件。

1、ILifeSpanHandler

该接口用于处理浏览器生命周期事件,比如窗口关闭、窗口最小化等。具体来说,它包含6个方法:

procedure OnAfterCreated(const browser: ICefBrowser);
function DoClose(const browser: ICefBrowser): Boolean;
procedure OnBeforeClose(const browser: ICefBrowser);
function OnBeforePopup(const parentBrowser: ICefBrowser; const popupFeatures: PCefPopupFeatures;
  const windowName, url: ustring; const browserSettings: ICefBrowserSettings;
  out Result: Boolean; var popupBrowserSettings: ICefBrowserSettings;
  var client: ICefClient; const requestContext: ICefRequestContext): Boolean;
procedure OnAfterCreated(const browser:ICefBrowser);
procedure OnBeforeClose(const browser: ICefBrowser);

2、IRequestHandler

该接口用于处理浏览器请求事件,比如请求网页或者Ajax请求等。具体来说,它包含9个方法:

function OnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest;
  isRedirect: Boolean): Boolean;
function GetDownloadHandler: ICefDownloadHandler;
procedure OnPluginCrashed(const browser: ICefBrowser; const pluginPath: ustring);
function OnResourceRedirect(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest;
  var newUrl: ustring): Boolean;
function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy:Boolean;
  const host: ustring; port: Integer; const realm, scheme: ustring;
  const callback: ICefAuthCallback): Boolean;
function OnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64;
  const callback: ICefRequestCallback): Boolean;
procedure OnRenderProcessTerminated(const browser: ICefBrowser; status: TCefTerminationStatus);
function OnProtocolExecution(const browser: ICefBrowser; const url: ustring): Boolean;
procedure OnRenderThreadCreated(const browser:ICefBrowser);

3、IDownloadHandler

该接口用于处理浏览器下载事件,具体来说,它包含4个方法:

function ReceivedData(const browser: ICefBrowser; const downloadItem: ICefDownloadItem;
  const data: Pointer; dataLength: NativeUInt): Boolean;
procedure Complete(const browser: ICefBrowser; const downloadItem: ICefDownloadItem;
  const fullPath: ustring);
function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean;
  const host: ustring; port: Integer; const realm, scheme: ustring;
  const callback: ICefAuthCallback): Boolean;
procedure Cancel;

三、示例代码

以下是一个简单的示例,演示了cef4delphi如何在Delphi应用程序中实现嵌入式浏览器功能:

program ChrDelphi;

uses
  ceflib, cefgui,
  {$IFDEF Windows}  //windows平台
  ceflibnative, ceflibnativeext, cefvcl,  //vcl需要的单元
  {$ENDIF}
  forms, controls,
  sysutils;

type
  TBrowserForm = class(TForm)
    Chromium1: TChromium;
    procedure FormShow(Sender: TObject);
    procedure Chromium1LoadEnd(Sender: TObject; const aBrowser: ICefBrowser; const aFrame: ICefFrame; aHttpStatus: Integer);
    procedure Chromium1Close(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Closed: Boolean;
  end;

var
  BrowserForm: TBrowserForm;

{ TBrowserForm }

procedure TBrowserForm.Chromium1Close(Sender: TObject);
begin
  Closed := True;  //设置浏览器窗口关闭标识
  Close;  //关闭表单
end;

procedure TBrowserForm.Chromium1LoadEnd(Sender: TObject; const aBrowser: ICefBrowser; const aFrame: ICefFrame; aHttpStatus: Integer);
begin
  Chromium1.ExecuteJavaScript('alert(''Haha, it works!'');', aFrame.Url, 0);  //执行浏览器中的JavaScript
end;

procedure TBrowserForm.FormShow(Sender: TObject);
begin
  Chromium1.CreateBrowserProcess;  //创建浏览器进程
  Chromium1.Load('http://www.baidu.com');  //加载网页
end;

begin
  BrowserForm := TBrowserForm.Create(nil);
  try
    BrowserForm.ShowModal;  //显示表单
  finally
    BrowserForm.Free;  //释放表单
  end;
end.

四、总结

通过本文的介绍,读者可以了解cef4delphi在实现嵌入式浏览器方面的应用,并掌握如何监听浏览器的不同事件。同时,这里还提供了一个简单的示例代码,帮助读者更好地理解cef4delphi的使用方式。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/186138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-26 21:10
下一篇 2024-11-27 05:44

相关推荐

发表回复

登录后才能评论