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 CEF3. Para poder añadir pestañas de navegador web basadas en Chromium en BriskBard es necesario usar la última rama estable de CEF3 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 CEF3. 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 CEF3. Los comentarios en CEF3 se actualizan con la misma frecuencia que el código y se pueden sustituir por una referencia al archivo de CEF3 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 CEF3.

La última versión de CEF4Delphi usa la rama 3396 de CEF3. En concreto se usa la versión CEF 3.3396.1777.g636f29b que incluye Chromium 67.0.3396.79

CEF4Delphi se desarrolló y probado en Delphi 10.2 Tokyo y se ha probado en Delphi 7, Delphi XE, Delphi 10 y Lazarus 1.8.4 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 la última versión de Delphi Starter desde Embarcadero. En el momento de escribir estas líneas es GRATIS.

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 CEF3. A su vez, CEF3 aisla al usuario de las complejidades de Chromium y Blink.

Esquema de CEF4Delphi

Enlaces

Proyecto CEF4Delphi :

Proyecto Chromium Embedded Framework (CEF3) :

Archivos binarios de CEF3 usados por CEF4Delphi :

Compatibilidad

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

Dado que CEF4Delphi usa la rama más reciente de CEF3, 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 CEF3 (Sample Application en inglés) desde la página de descargas del proyecto CEF3.

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 CEF3 y los documentos sobre el diseño de Chromium.

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

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

CEF4Delphi simplifica toda la inicialización de CEF3 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 CEF3 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 CEF3 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 CEF3.
  • SetCurrentDir : Dar valor de True para establecer el directorio actual de la aplicación antes de cargar la DLLs de CEF3.
  • 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.

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 y cree un archivo crash_reporter.cfg como se describe aquí.

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í.

Como todas las aplicaciones CEF3, usted debe copiar los archivos de la distribución binaria de CEF3 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 CEF3.

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 CEF3 junto a la aplicación.
Disposición final de los archivos de la distribución binaria de CEF3 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 CEF3 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 CEF3 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 CEF3 que se especifica en la introducción. CEF3 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.

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 CEF3 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 CEF3 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.
  • SimpleLazarusBrowser : El navegador web más simple hecho con Lazarus y CEF4Delphi. Usa TChromium y TWindowParent.
  • SimpleLazOSRBrowser : Un navegador web hecho con Lazarus que usa TChromium en modo OSR.

Para probar las demostraciones siga estos pasos :

  1. Descargar los archivos binarios de CEF3 usados por CEF4Delphi : 32 bit - 64 bit
  2. Descomprimir el archivo con los archivos binarios de CEF3 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 CEF3 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 CEF3 siguiendo las instrucciones de este hilo del foro.

Complementos y extensiones de navegador

Actualmente CEF3 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 CEF3 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 17 de junio de 2018.

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