CEF4Delphi

Descripción

CEF4Delphi es un proyecto de código abierto creado por Salvador Díaz Fau para incluir navegadores basados en Chromium dentro de aplicaciones realizadas con Delphi o Lazarus/FPC.

Introducción

CEF4Delphi se basa en DCEF3, hecho por Henri Gourvest, el cual está adaptado para la rama 2623 de CEF. Para poder añadir pestañas de navegador web basadas en Chromium en BriskBard es necesario usar la última rama estable de CEF y disponer de actualizaciones frecuentemente. Dado que DCEF3 no se ha actualizado en los últimos meses se decidió crear un proyecto nuevo.

El objetivo principal de CEF4Delphi es simplificar en lo posible el trabajo necesario para adaptarlo a las nuevas versiones de CEF. Para ello fue necesario tomar las siguientes medidas :

  • Se han eliminado redundancias. El componente OSR se fusionó con TChromium.
  • Se han borrado los comentarios copiados del código de CEF. Los comentarios en CEF se actualizan con la misma frecuencia que el código y se pueden sustituir por una referencia al archivo de CEF donde se encuentran.
  • Se ha repartido el código en muchas más unidades de menor tamaño.
  • Se han añadido comentarios con las equivalencias de clases y tipos entre CEF4Delphi y CEF.

La última versión de CEF4Delphi usa la rama 3770 de CEF. En concreto se usa la versión CEF 75.0.11 que incluye Chromium 75.0.3770.100

CEF4Delphi se desarrolló y probado en Delphi 10.3 Rio y se ha probado en Delphi 7, Delphi XE, Delphi 10, Delphi 10.2 y Lazarus 2.0.2 con FPC 3.0.4. CEF4Delphi incluye componentes VCL, FireMonkey (FMX) y Lazarus que se han probado en 32 y 64 bits.

Si desea probar CEF4Delphi considere la opción de descargar gratuitamente la última versión de Delphi Community Edition desde Embarcadero.

También es posible probar CEF4Delphi descargando gratuitamente Lazarus/FPC.

Esquema

Antes de usar CEF4Delphi con una aplicación hecha con Delphi o Lazarus es necesario comprender que CEF4Delphi es una capa (wrapper) que usa la API C de CEF. A su vez, CEF aisla al usuario de las complejidades de Chromium y Blink.

Esquema de CEF4Delphi

Enlaces

Proyecto CEF4Delphi :

Proyecto Chromium Embedded Framework (CEF) :

Archivos binarios de CEF usados por CEF4Delphi :

Proyecto OldCEF4Delphi :

Compatibilidad

Google anunció en 2015 que Chrome no seguiría siendo compatible con Windows XP. La última rama de CEF compatible con Windows XP fue la rama 2623, publicada en 2016.

Dado que CEF4Delphi usa la rama más reciente de CEF, no es compatible con Windows XP, Windows Vista, Windows Server 2003 y Windows Server 2008.

CEF4Delphi necesita Windows 7, 8, 8.1, 10 o posterior para funcionar pero si se desea probar alguna otra versión de Windows solo hay que descargar e intentar ejecutar la aplcación de ejemplo de CEF (Sample Application en inglés) desde la página de descargas del proyecto CEF.

Si necesita que su aplicación funcione en Windows XP o Vista use OldCEF4Delphi.

Instalación

Para compilar e instalar CEF4Delphi en la última versión de Delphi hay que seguir los siguientes pasos :

  1. Descargar la última versión de CEF4Delphi desde GitHub.
  2. Descomprimir CEF4Delphi en un directorio y asegúrese de que su usuario tiene privilegios de escritura en ese directorio.
  3. Ejecutar Delphi.
  4. Añadir el directorio source de CEF4Delphi al library path en Delphi dentro del menú Tools->Options. En la ventana Options hay que hacer clic sobre Environment Options->Delphi Options->Library, seleccionar la plataforma de 32 o 64 bits y añadir el directorio en Library path.
  5. Abrir el archivo CEF4Delphi.dproj desde Delphi si solo quiere componentes VCL. Si quiere intalar los componentes FireMonkey (FMX) y VCL abra CEF4Delphi_FMX.dproj.
  6. Hacer clic con el botón derecho del ratón sobre el icono de CEF4Delphi.bpl dentro del panel del Project manager y seleccionar la opción Build.
  7. Hacer clic con el botón derecho del ratón sobre el icono de CEF4Delphi.bpl dentro del panel del Project manager y seleccionar la opción Install.

Para compilar e instalar CEF4Delphi en Delphi 7 hay que seguir los siguientes pasos :

  1. Descargar la última versión de CEF4Delphi desde GitHub.
  2. Descomprimir CEF4Delphi en un directorio y asegúrese de que su usuario tiene privilegios de escritura en ese directorio.
  3. Ejecutar Delphi.
  4. Añadir el directorio source de CEF4Delphi al library path en Delphi dentro del menú Tools->Environment options. En la ventana Environment Options hay que seleccionar la pestaña Library y añadir el directorio en Library path.
  5. Abrir el archivo CEF4Delphi_D7.dpk desde Delphi.
  6. Hacer clic en el botón Compile.
  7. Hacer clic en el botón Install.

Para compilar e instalar CEF4Delphi en Lazarus hay que seguir los siguientes pasos :

  1. Descargar la última versión de CEF4Delphi desde GitHub.
  2. Descomprimir CEF4Delphi en un directorio y asegúrese de que su usuario tiene privilegios de escritura en ese directorio.
  3. Ejecutar Lazarus.
  4. Abrir el archivo cef4delphi_lazarus.lpk desde el menú Package->Open Package File (*.lpk)....
  5. Hacer clic en el botón Compile en la ventana del paquete.
  6. Hacer clic en el botón Use y seleccionar la opción Install.

Uso

Antes de usar CEF4Delphi por primera vez es muy recomendable leer la información sobre CEF y los documentos sobre el diseño de Chromium.

La documentacion de la API de CEF está disponible en magpcss.org y hay muchísima información sobre el uso de CEF en los comentarios de su código fuente.

Como se puede ver en la documentación, CEF usa múltiples procesos y ejecutará el mismo exe u otro diferente para crearlos. Por esa razón CEF necesita estar inicializado antes de que se ejecute TApplication.

CEF4Delphi simplifica toda la inicialización de CEF gracias a GlobalCEFApp, el cual es una instancia de la clase TCEFApplication.

Dado que TApplication debe inicializarse y ejecutarse únicamente en el proceso principal, es necesario crear GlobalCEFApp y ejecutar GlobalCEFApp.StartMainProcess para detectar si ese es el proceso principal.

Una aplicación Delphi suele tener este código en su archivo DPR :

program Project1; uses Vcl.Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end.

Para incluir CEF4Delphi solo habría que añadir la unidad uCEFApplication y WinApi.Windows a la cláusula uses, crear la variable global GlobalCEFApp, llamar a GlobalCEFApp.StartMainProcess y por último liberar GlobalCEFApp. También hay que añadir la directiva SetPEFlags.

program Project1; uses Vcl.Forms, WinApi.Windows, uCEFApplication, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} begin GlobalCEFApp := TCefApplication.Create; if GlobalCEFApp.StartMainProcess then begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end; GlobalCEFApp.Free; end.

La creación de GlobalCEFApp debe estar en el archivo DPR y la llamada a GlobalCEFApp.StartMainProcess debe estar en una clausula if..then.

GlobalCEFApp.StartMainProcess dará como resultado True si detecta que está funcionando en el proceso principal y solo entonces se ejecutarán Application.Initialize, Application.MainFormOnTaskbar, Application.CreateForm y Application.Run.

Si desea una configuración diferente de CEF solo hay que modificar las propiedades de GlobalCEFApp antes de GlobalCEFApp.StartMainProcess.

Casi todas las propiedades de TCefApplication se corresponden con los campos de cef_settings_t pero también se incluyen los eventos de las clases CefApp, CefBrowserProcessHandler, CefRenderProcessHandler y CefResourceBundleHandler.

Otras propiedades en TCefApplication :

  • Cookies : Directorio donde se almacenan las cookies del navegador web.
  • DeleteCache : Dar valor de True si se desea borrar la cache durante la inicialización.
  • DeleteCookies : Dar valor de True si se desea borrar las cookies durante la inicialización.
  • FlashEnabled : Dar valor de True si se desea usar la versión de Adobe Flash Player (PPAPI) intalada en el sistema operativo.
  • CheckCEFFiles : Dar valor de True si se desea comprobar la integridad de los archivos de CEF durante la inicialización.
  • EnableMediaStream : Dar valor de True si se desea activar retransmisión de audio y video con WebRTC
  • EnableSpeechInput : Dar valor de True si se desea activar la introducción de datos por voz.
  • SmoothScrolling : Dar valor de STATE_ENABLED, STATE_DISABLED o STATE_DEFAULT para activar la animación de las barras de desplazamiento.
  • FastUnload : Dar valor de True para acelerar el cierre de pestañas y ventanas.
  • EnableHighDPISupport : Dar valor de True para poder usar un valor de DPI alto.
  • MuteAudio : Dar valor de True para desactivar todo el audio.
  • EnableGPU : Dar valor de True para activar la aceleración de hardware.
  • DisableSafeBrowsing : Dar valor de True para desactivar las características de Google Safe Browsing.
  • CustomFlashPath : Directorio donde se encuentran las DLLs de Adobe Flash.
  • ShowMessageDlg : Dar valor de True para mostrar mensajes de error en caso de que no se encuentre alguno de los archivos de CEF.
  • SetCurrentDir : Dar valor de True para establecer el directorio actual de la aplicación antes de cargar la DLLs de CEF.
  • ReRaiseExceptions : Dar valor de True para activar las excepciones internas.
  • CheckDevToolsResources : Dar valor de True para comprobar que los recursos de DevTools están presentes.
  • LocalesRequired : Lista de recursos del directorio locales que tienen que estar presentes.
  • SitePerProcess : Activa la política de seguridad de un-sitio-por-proceso.
  • DisableWebSecurity : Desactiva las medidas de seguridad que impiden cargar archivos locales.
  • ShutdownWaitTime : Tiempo en milisegundos que TCefApplication esperará antes de su destrucción.
  • MustFreeLibrary : Dar valor de False con aplicaciones grandes para evitar problemas en el cierre.
  • DisablePDFExtension : Dar valor de True para desactivar el visor de PDF y descargar los archivos PDF automáticamente.
  • AutoplayPolicy : Configura la política de reproducción automática con estos valores : appDefault, appDocumentUserActivationRequired, appNoUserGestureRequired, appUserGestureRequired or appUserGestureRequiredForCrossOrigin.
  • DisableExtensions : Dar valor de True para desactivar todas las extensiones.
  • LogFile : Directorio y nombre del archivo de registro. Si no se especifica nada se usa 'debug.log'.
  • LogSeverity : Grado de información añadido al archivo de registro.
  • LogProcessInfo : Dar valor de True para añadir la información de los procesos al archivo de registro.
  • UsedMemory : Cantidad de memoria usada por todos los procesos de la aplicación.
  • TotalSystemMemory : Cantidad de memoria física.
  • AvailableSystemMemory : Cantidad de memoria física disponible actualmente.
  • SystemMemoryLoad : Porcentaje de memoria física en uso.

Para añadir parámetros personalizados en la linea de comandos use el procedimiento AddCustomCommandLine con alguno de los argumentos de estas listas : peter.sh, cef_switches.cc.

Si desea usar otro ejecutable para los subprocesos eche un vistazo a la demo SubProcess, configure la propiedad BrowserSubprocessPath de TCefApplication con el nombre del ejecutable.

Posteriormente hay que añadir componentes diferentes dependiendo del tipo de aplicación que se desea crear :

  • Ventana de navegador normal : Añada un TChromium y un TCEFWindowParent al Form donde desea tener el navegador y llame a la función CreateBrowser con la instancia de TCEFWindowParent como su primer parámetro. Alternativamente puede añadir un TChromiumWindow, que es una clase que hereda de TCEFWindowParent y que contiene a un control TChromium. Eche un vistazo a la demos SimpleBrowser y SimpleBrowser2 para saber más detalles.
  • Renderizado fuera de pantalla : Añada un TChromium al Form y llame a la función CreateBrowser sin parámetros. Asegúrese de dar un valor de True GlobalCEFApp.WindowlessRenderingEnabled. Consulte la demo SimpleOSRBrowser para saber más detalles.

Como puede ver en el código fuente, TChromium agrupa las funciones, procedimientos y eventos de :

Otras propiedades y funciones en TChromium que puede considerar interesantes :

  • IncZoomStep, DecZoomStep, ResetZoomStep : Usados para modificar el zoom de la página web.
  • CustomHeaderName, CustomHeaderValue : Usados para enviar cabeceras personalizadas en cada petición.
  • DoNotTrack : Dar valor de True si se desea enviar la cabecera DNT.
  • SendReferrer : Dar valor de True si se desea enviar la cabecera 'referer'.
  • ProxyType, ProxyServer, ProxyPort, ProxyUsername, ProxyPassword, ProxyScriptURL, ProxyByPassList : Configuración del proxy como se describe aquí.
  • SpellChecking : Dar valor de True si se desea activar el corrector ortográfico.
  • SpellCheckerDicts : Lista separada por comas de códigos de idiomas usados por el corrector ortográfico, por ejemplo 'es-ES,en-US,fr-FR,de-DE,it-IT'.

Casi todos los eventos de TCefApplication, TChromium y TChromiumWindow se ejecutan en un hilo diferente. Si se accede a objetos VCL dentro de esos eventos podría tener problemas, especialmente si se crean o destruyen objetos VCL dentro de esos eventos. Se recomienda guardar los parametros y enviar un mensaje de Windows al Form principal para manejar los objetos VCL de manera segura en el hilo principal.

Como todas las aplicaciones CEF, usted debe copiar los archivos de la distribución binaria de CEF al directorio donde se encuentra su aplicación CEF4Delphi. Esos archivos son parte de un paquete llamado 'Standard Distribution' y está disponible en la página de descargas de CEF.

Una vez que ha descargado y descomprimido el paquete 'Standard Distribution' hecho para la plataforma de windows de su elección, debe copiar los contenidos de los directorios Release y Resources del paquete al directorio donde se encuentre el ejecutable de su aplicación. Aquí tiene una captura de pantalla de la disposición final de los archivos :

Disposición final de los archivos de la distribución binaria de CEF junto a la aplicación.
Disposición final de los archivos de la distribución binaria de CEF junto a la aplicación.
Se puede apreciar que los archivos cef_sandbox.lib y libcef.lib pueden omitirse.

Si desea mover todos los archivos binarios de CEF a otro directorio puede especificarlo en las propiedades GlobalCEFApp.FrameworkDirPath, GlobalCEFApp.ResourcesDirPath and GlobalCEFApp.LocalesDirPath antes de la llamada a GlobalCEFApp.StartMainProcess en el archivo DPR.

En caso de no haber copiado todos los archivos binarios de CEF correctamente y dependiendo de las propiedades de GlobalCEFApp, aparecerán en pantalla mensajes de error como estos : CEF binaries missing, CEF framework files missing, CEF resources missing o CEF locale files missing.

Es extremadamente importante usar sólamente la versión de los archivos binarios de CEF que se especifica en la introducción. CEF evoluciona muy rápidamente y se introducen cambios en cada una de sus versiones.

Si intenta usar una versión diferente su aplicación podría dar errores o, dependiendo de las propiedades de GlobalCEFApp, también podría ver este mensaje de error : Unsupported CEF version.

En caso de que esté creando una aplicación FireMonkey por favor lea los comentarios en el código de las demos FMX. Las aplicaciones FireMonkey que usen CEF4Delphi necesitan añadir una definición condicional $(FrameworkType) en las opciones del proyecto para evitar recursos duplicados.

Depurado

El uso de múltiples procesos puede dificultar la depuración en Delphi pero en esos casos se pueden usar las siguientes herramientas :

  • Dar valor de True a GlobalCEFApp.SingleProcess antes de la llamada a GlobalCEFApp.StartMainProcess en el archivo DPR. De esta manera solo se usa un proceso y Delphi puede depurarlo sin problemas. Este modo solo debería usarse para depurar y nunca en versiones finales de la aplicación.
  • Ustilizar varios procesos pero usando la opción de Run->Run Without Debugging... en Delphi. Posteriormente seleccionar Run->Attach To Process... y seleccionar el proceso que se desea depurar.
  • Usar el archivo debug.log para registrar mensajes de texto personalizables con la funcion CefLog como se hace en la demo DOMVisitor. Es necesario dar valores a GlobalCEFApp.LogFile y GlobalCEFApp.LogSeverity antes de la llamada a GlobalCEFApp.StartMainProcess en el archivo DPR.
  • En caso de usar javascript se pueden usar las herramientas de depurado DevTools para ver los mensajes de consola y depurar el código javascript. La demo MiniBrowser tiene todo lo necesario para añadir DevTools a una aplicación.

Demos o ejemplos

  • SimpleBrowser : El navegador web más simple hecho con CEF4Delphi. Utiliza un componente TChromiumWindow.
  • SimpleBrowser2 : El navegador web más simple hecho con CEF4Delphi. Utiliza una combinación de dos componentes : TChromium y TCEFWindowParent.
  • MiniBrowser : Un navegador web que usa los componentes TChromium y TCEFWindowParent. Tiene menú contextual personalizado, interfaz de navegador básica, herramientas de desarrollo, zoom, impresión, configuración de proxy y algunas funciones extra para copiar el HTML e imprimir desde JavaScipt.
  • SimpleOSRBrowser : Un navegador web que usa TChromium en modo OSR en caso de que necesite renderizado fuera de pantalla.
  • CustomResourceBrowser : Un navegador simple que muestra recursos y páginas web personalizadas en lugar de sitios web en Internet.
  • DOMVisitor : Uso básico de las clases de CEF para buscar nodos y recorrer el arbol de nodos DOM.
  • FullScreenBrowser : Navegador web simple a pantalla completa que usa TChromium y TCEFWindowParent. Utiliza la tecla ESC para salir.
  • JavaScript : Conjunto de ejemplos sobre ventanas de avisos de JavaScript y la integración de JavaScript con extensiones, unión de objectos y funciones a la ventana, ejecución de funciones, evaluaciones y envío de mensajes entre procesos.
  • MDIBrowser : Multiples componentes TChromium en una aplicación MDI.
  • ToolBoxBrowser : Multiples componentes TChromium en una aplicación usando ventanas de tipo ToolBox.
  • SchemeRegistrationBrowser : Registro completo de un esquema de URL que muestra páginas web personalizadas.
  • SubProcess : En caso de que no pueda usar el ejecutable principal para todos los procesos de CEF puede utilizar este ejemplo.
  • CookieVisitor : Usa TCefCookieManagerRef para leer todas las cookies.
  • TabbedBrowser : Multiples componentes TChromium y TCEFWindowParent en pestañas.
  • ExternalPumpBrowser : Navegador hecho con los componentes TChromium y TCEFWindowParent usando la configuración de bucle externo de mensajes.
  • OSRExternalPumpBrowser : Navegador en modo OSR usando la configuración de bucle externo de mensajes.
  • SimpleExternalPumpBrowser : Navegador hecho con el componente TChromiumWindow usando la configuración de bucle externo de mensajes.
  • SimpleServer : Servidor HTTP y websockets hecho con el componente TCEFServerComponent para la comunicación entre aplicaciones locales.
  • MDIExternalPumpBrowser : Multiples componentes TChromium en una aplicación MDI usando la configuración de bucle externo de mensajes.
  • FMXExternalPumpBrowser : Un navegador que usa TFMXChromium en una aplicación FireMonkey.
  • ResponseFilterBrowser : Un navegador hecho con los componentes TChromium y TCEFWindowParent usando un filtro de respuestas personalizado.
  • PopupBrowser : Esta demostración muestra como usar forms personalizados con las ventanas emergentes en modo OSR.
  • PopupBrowser2 : Esta demostración muestra como usar forms personalizados con las ventanas emergentes en modo normal.
  • SimpleFMXBrowser : El navegador web más simple hecho con CEF4Delphi y componentes FireMonkey. Usa TFMXChromium y TFMXWindowParent.
  • DLLBrowser : Un navegador web creado desde una DLL.
  • FMXToolBoxBrowser : Multiples componentes TFMXChromium en una aplicación FireMonkey usando ventanas de tipo ToolBox.
  • KioskOSRBrowser : Navegador web de quiosco a pantalla completa en modo OSR con un teclado virtual que se muestra automáticamente cuando el usuario hace clic en un elemento HTML editable. El menú contextual también incluye opciones para ocultar o mostrar el teclado. Hay que pusar la tecla ESC para salir.
  • ConsoleBrowser : Navegador web en modo OSR creado en una DLL y una aplicación de consola.
  • PostInspectorBrowser : Navegador web con un inspector de los datos de peticiones POST.
  • URLRequest : Demostración de uso del componente TCEFUrlRequestClientComponent.

Para probar las demostraciones siga estos pasos :

  1. Descargar los archivos binarios de CEF usados por CEF4Delphi : 32 bit - 64 bit
  2. Descomprimir el archivo con los archivos binarios de CEF en un directorio temporal.
  3. Copiar los contenidos de los directorios Release y Resources al directorio BIN de CEF4Delphi.
  4. Compilar la demostración.
  5. Ejecutar la demostración.

Codecs

Debido a problemas de licencias y a la ley de patentes de EE.UU., los archivos de CEF disponibles en Spotify tienen desactivados los codecs privativos. Si usa esos archivos, los sitios web que ofrezcan multimedia usando H264 no funcionarán.

En el caso de que necesite usar esos codecs puede compilar usted mismo los archivos de CEF siguiendo las instrucciones de este hilo del foro.

Para compilar los archivos de CEF es necesario usar un PC de gran rendimiento. Puede llevar varias horas incluso con una cpu Intel I7 con 16GB de RAM. Se recomienda tener 32GB de RAM y usar una unidad de almacenamiento SSD.

Lea los artículos 'Quick Start' y 'Branches And Building' en las páginas Wiki de CEF antes de intentar compilarlos.

Las fuentes de CEF usadas para la compilaci$ón deben tener exactamente la misma versió:n soportada por CEF4Delphi en ese momento.

Complementos y extensiones de navegador

Actualmente CEF solo soporta el complemento PPAPI de Adobe Flash. Los complementos NaCl y NPAPI, junto a las extensiones no están soportadas aunque hay una petición para añadir extensiones.

Google no soporta complementos NPAPI desde la versión 45 de Chromium, publicada en septiembre de 2015. Solo las ramas anteriores a 2454 de CEF soportan complementos NPAPI para Java, Silverlight o Facebook video.

Sobre el nombre

CEF4Delphi es solo un numerónimo y se debería interpretar como CEF for Delphi, es decir CEF para Delphi en español. No significa que esté basado en CEF4.

Cómo ayudar

Si desea ayudar en este proyecto puede realizar una donación pulsando el siguiente botón :

También puede ayudar dando a conocer este proyecto a sus amistades, compartiendo los mensajes de este proyecto en las redes sociales, escribiendo artículos sobre este proyecto en su página web, haciendo sugerencias, informando sobre errores, etc.

Si realiza compras en Internet también puede ayudar usando estos enlaces para sus compras :




Artículo actualizado el 20 de junio de 2019.

Uso de cookies

Por el hecho de navegar en este sitio acepta usar nuestras cookies. Solo verá este mensaje una vez.
Más información
Cerrar