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.

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. Ahora solo hay un componente TChromium. Los componentes OSR y normal se fusionaron en TChromium y el componente FMX se borró.
  • 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 3163 de CEF3. En concreto se usa la versión CEF 3.3163.1671.g700dc25 que incluye Chromium 61.0.3163.91

CEF4Delphi se desarrolló y probado en Delphi 10.2 Tokyo y se ha probado en Delphi 7, Delphi XE y Delphi 10.

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 lineas es GRATIS.

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.

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

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 sus propiedades se corresponden con los campos de cef_settings_t.

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.
  • EnableSpellingService : Dar valor de True si se desea activar el servicio ortográfico de Google.
  • 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 True para activar la animación de las barras de desplazamiento.
  • FastUnload : Dar valor de True para acelerar el cierre de pestañas y ventanas.
  • DisableSafeBrowsing : Dar valor de True para desactivar varias funciones anti phishing.
  • EnableHighDPISupport : Dar valor de True para poder usar un valor de DPI alto.
  • MuteAudio : Dar valor de True para desactivar todo el audio.

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 MiniBrowser y SimpleBrowser 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.

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. Su aplicación podría dar errores si intenta usar una versión no soportada de CEF3 con CEF4Delphi.

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.
  • MiniBrowser : Un navegaor 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 : A simple browser that shows customized resources and web pages instead of Internet websites.
  • 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.
  • JSEval : Este ejemplo pide al usuario que introduzca código JavaScript para ejecutarlo en el contexto de v8 y posteriormente enviar los resultados a la ventana principal.
  • JSExtension : Registro de una extensión JavaScript hecha en Delphi capaz de enviar los resultados a la ventana principal. Esta extensión también puede usarse para interactuar con el DOM.
  • 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.
  • PostDataInspector : Usa un método alternativo para leer los datos POST antes de ser enviados.
  • Geolocation : Usa TCefGetGeolocationCallbackOwn para leer la información geográfica. Este ejemplo está incompleto.
  • TabbedBrowser : Multiples componentes TChromium y TCEFWindowParent en pestañas.

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 MP3 o 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.

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 :




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