全能開發工程師手冊之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/zh-tw/n/186138.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 21:10
下一篇 2024-11-27 05:44

相關推薦

發表回復

登錄後才能評論