如何使用 Chromium Embedded (CEF) 加载本地 html 文件?



我想将一个html文件加载到Chromium(CEF4Delphi(中,但什么都没有显示,只有一个白页。

是否可以使用以下方法加载本地 html 文件?

这是html 文件。

还有其他麻烦,每次执行 Chromium 时,也会执行我的应用程序的其他实例。如何解决这个问题?

使用的代码:

var
Form1: TForm1;
FStarted: Boolean;
implementation
{$R *.dfm}
function CEFApplication: TCefApplication;
var
sPath: String;
begin
sPath := ExtractFilePath(ParamStr(0));
if not assigned(GlobalCEFApp) then
begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.FlashEnabled := False;
GlobalCEFApp.FastUnload := True;
GlobalCEFApp.FrameworkDirPath := sPath + 'cef';
GlobalCEFApp.ResourcesDirPath := sPath + 'cef';
GlobalCEFApp.LocalesDirPath := sPath + 'ceflocales';
GlobalCEFApp.Cache := sPath + 'cefcache';
GlobalCEFApp.Cookies := sPath + 'cefcookies';
GlobalCEFApp.UserDataPath := sPath + 'cefUser Data';
GlobalCEFApp.EnableGPU := False;
end;
if not FStarted then
FStarted := GlobalCEFApp.StartMainProcess;
result := GlobalCEFApp;
end;
initialization
CEFApplication;
end.

表格2:

procedure TForm2.FormShow(Sender: TObject);
begin
while not(Chromium1.CreateBrowser(CEFWindowParent1, '')) and
(Chromium1.Initialized) do
begin
Sleep(100);
Application.processMessages;
end;
Chromium1.LoadURL(ExtractFilePath(ExtractFilePath(Application.ExeName)) + 'gmaps.html');
end;

版:

相对于我对正在执行的应用程序的多个实例的怀疑,根据本文,这是正常且正确的。

这是我在代码中的做法:

CBrowser.Load('file:///' + ReplaceStr(fpath, '', '/'));

CEF4Delphi对此有一个TChromium.LoadString

我在受保护的

procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED;

喜欢这个:

procedure TDialoogDeclaratieGoogleMaps.BrowserCreatedMsg(var aMessage : TMessage);
begin
PanelBrowser.UpdateSize;      // The TCEFWindowParent
ChromiumBrowser.LoadString(FGoogleHTML);   // String read from file earlier
end;

并且该消息发布在 afterCreated 方法中:

procedure TDialoogDeclaratieGoogleMaps.ChromiumBrowserAfterCreated(Sender: TObject; const browser: ICefBrowser);
begin
PostMessage(Handle, CEF_AFTERCREATED, 0, 0);
end;

最新更新