一、简介
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