Até a versão Tokyo do Delphi, o navegador padrão embutido é o TWebBrowser – uma implementação para chamada do Navegador padrão do Windows. Se as páginas a serem chamadas são páginas mais antigas – ele até vai bem. No entanto quando o desejo for carregar o que há de mais novo em estrutura do HTML5 com frameworks como Angular5 e outros, vários problemas de incompatibilidade surgirão á inviabilizar o uso do TWebBrowser.
TChromium como Navegador
A alternativa que se mostra mais adequada para uso dos novos frameworks é a utilizado o TChromium com a implementação CEF4Delphi créditos para Salvador Díaz Fau como consta.
Leia os exemplos
É imperativo a leitura dos exemplos que são baixados do GIT. Ele requer chamada e configuração inicial antes do uso da biblioteca, assim como é necessário aguardar a inicialização da mesma antes de sair carregando a página. Então não deixe de olhar os exemplos.
Na inicialização – antes de abrir uma página
// preparando as configurações var FStarted:boolean; function CEFApplication: TCefApplication; var sPath:String; begin sPath := extractFilePath(ParamStr(0)); /// ou outro que for adequado ao seu aplicativo - com o local de instalação das DLLs do pacote 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+'cef\locales'; GlobalCEFApp.cache := sPath+'cef\cache'; GlobalCEFApp.cookies := sPath+'cef\cookies'; GlobalCEFApp.UserDataPath := sPath+'cef\User Data'; GlobalCEFApp.EnableGPU := false; end; if not FStarted then FStarted := GlobalCEFApp.StartMainProcess; result := GlobalCEFApp; end; // na inicialização do projeto - chamar os dados de configuração da biblioteca - CEFApplication;
Antes de abrir uma página
Olhando para os exemplos, ele requer que a criação da área de apresentação (o Browser) exige que a estrutura de carga da biblioteca já esteja carregada.
Para fazer isto é preciso ficar monitorando a conclusão da inicialização para somente após criar a camada de apresentação (a VIEW);
Aqui nós usamos um timer para ficar monitorando quando que a estrutura foi inicializada.
algo que represente um loop:
while not (Chromium1.CreateBrowser(CEFWindowParent1, '')) and (Chromium1.Initialized) do begin delay(100); application.processMessage(); // avaliar se a aplicação requer despachar outras mesnagens. end;
Somente após a resposta que tudo foi carregado com sucesso que a página é chamada. Neste ponto uma dica é usar o evento “AfterCreated” do componente, ou seja, o “AfterCreated” é chamado após o componente ter concluído a criação da área de apresentação.
Carregando uma página
Depois de tudo inicializado “AfterCreated” é o momento de carrega a nossa página:
Chromium1.LoadURL(url);