Red de conocimiento informático - Material del sitio web - Cómo crear una aplicación sencilla usando CEF3

Cómo crear una aplicación sencilla usando CEF3

Comience

Primero, dependiendo de su plataforma de desarrollo, puede descargar la versión adecuada desde aquí. Para este tutorial, necesitamos descargar la versión 1750 o posterior. Las plataformas actualmente soportadas son Windows, Linux y Mac OS X. Cada versión contiene todos los archivos y recursos necesarios para compilar una versión específica de CEF3 en una plataforma específica. Puede conocer los detalles específicos de cada versión visitando el archivo REDME.txt adjunto o la guía de introducción en Uso General en la wiki.

Compilación de proyectos según la versión

Las aplicaciones basadas en versiones CEF se pueden compilar para su ejecución utilizando herramientas de compilación de plataforma estándar. Estas herramientas incluyen Visual Studio para Windows, Xcode para Mac OS X y gcc/make para Linux, y cada plataforma tiene un proceso de compilación ligeramente diferente.

Windows

Pasos para compilar Cefsimple en Windows:

1. Abra la solución del proyecto utilizando la versión adecuada de Visual Studio. Por ejemplo, si instaló Visual Studio 2010, se abrirá cesimple2010.sln.

2. Si descargaste la versión x64, asegúrate de seleccionar la plataforma de desarrollo x64.

3. Comience a compilar.

4. Si la compilación se realiza correctamente, la carpeta "out/Debug" (o "out/Release") aparecerá en el directorio de la solución actual.

5. Ejecute cefsimple.exe en la carpeta y asegúrese de que se ejecute normalmente.

Cargar URL personalizada

La URL predeterminada cargada en el proyecto cefsimple es google.com. Por supuesto, también puede reemplazarla con una URL personalizada, lo cual es más conveniente desde el comando. línea. .

# Cargar archivo local "c:\example/example.html"

cefsimple.exe --url=file://c:/example/example.html<

cefsimple.exe p>

Además del método de línea de comando, también puede lograr su objetivo modificando directamente el código en el archivo cefsimple/simple.cpp.

# Cargar archivo local "c:\example\example.html"

...

if (url.empty())

url = file ://c:/example/example.html;

Componentes de la aplicación

Todas las aplicaciones CEF contienen los siguientes componentes principales:

1.Biblioteca de enlaces dinámicos CEF. (libcef.dll en Windows)

2. Biblioteca de soporte. (ICU, FFMPEG, etc.)

3. (html/js/css, cadena, etc.)

4. (cefsimple.exe en este tutorial)

Aspectos destacados (debe leerse)

1.CEF utiliza múltiples procesos. El proceso de aplicación principal es el proceso del navegador, y otros procesos secundarios son creados por renderizadores, complementos, GPU, etc.

2. Tanto el proceso principal como el proceso secundario pueden utilizar archivos ejecutables en plataformas Windows y Linux.

3. Todos los procesos en CEF pueden utilizar subprocesos múltiples. CEF proporciona muchas funciones e interfaces para pasar tareas entre subprocesos.

4. Algunos métodos y funciones de devolución de llamada solo se pueden utilizar en procesos o subprocesos específicos. Antes de utilizar una nueva función o método de devolución de llamada por primera vez, asegúrese de leer el código fuente en el archivo de encabezado de la API para comprender los requisitos de uso.

Análisis de procesos

La aplicación cefsimple primero inicializa CEF y luego crea una ventana emergente simple en el navegador. Después de cerrar todas las ventanas del navegador, la aplicación finaliza. El flujo de ejecución del programa es el siguiente:

1. El sistema ejecuta la función de punto de entrada (principal o wWinMain) y crea un proceso de navegador.

2. Función de punto de entrada:

1. Cree una instancia de SimpleApp que pueda manejar métodos de devolución de llamada a nivel de proceso.

2. Inicialice CEF e ingrese al bucle de mensajes CEF.

3. Después de inicializar CEF, llame a SimpleApp::OnContextInitialized(). En este método:

1. Cree un SimpleHandler singleton.

2. Utilice el método CefBrowserHost::CreateBrowsersync() para crear una ventana del navegador.

4. Todos los navegadores tienen acceso a una instancia de SimpleHandler, que puede personalizar el comportamiento del navegador y manejar métodos de devolución de llamada relacionados con el navegador (vida útil, estado de carga, visualización del título, etc.).

5. Cuando la ventana del navegador esté cerrada, llame a SimpleHandler::OnBeforeClose(). Cuando todas las ventanas del navegador están cerradas, la función OnBeforeClose() realiza el comportamiento de salir del bucle de mensajes CEF y salir de la aplicación.

Función de punto de entrada

La ejecución del programa comienza con una función de punto de entrada en el proceso del navegador. Esta función inicializa CEF y todos los objetos relacionados con el sistema operativo.

Windows

#include

#include "cefsimple/simple_app.h"

#include "include/ cef_sandbox_win.h"

// Establezca en 0 para deshabilitar la compatibilidad con sandbox.

#define CEF_ENABLE_SANDBOX 1

#if CEF_ENABLE_SANDBOX

// La biblioteca estática cef_sandbox.lib se construye actualmente usando VS2010.

#pragma comment(lib, "cef_sandbox.lib" )

#endif

// Función de punto de entrada para todos los procesos.

int APIENTRY wWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow) {

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_ PARAMETER(lpCmdLine);

void* sandbox_info = NULL;

#if CEF_ENABLE_SANDBOX

// Gestionar el ciclo de vida de los objetos de información del sandbox. Esto es necesario para admitir la zona de pruebas en Windows

// .

CefScopedSandboxInfo con alcance _sandbox;

sandbox_info =scoped_sandbox.sandbox_info();

#endif

// Proporciona parámetros de línea de comando para CEF .

CefMainArgs main_args(hInstance);

// SimpleApp implementa devoluciones de llamada a nivel de aplicación. Creará la primera

// instancia del navegador en OnContextInitialized() después de la inicialización de CEF.

CefRefPtr app(new SimpleApp);

// La aplicación CEF tiene múltiples procesos secundarios (renderizado, complementos, GPU, etc.) que comparten el mismo archivo ejecutable

p>

// . Esta función verificará la línea de comando,

// Si se trata de un subproceso, esta función verificará la línea de comando,

// Si se trata de un subproceso, esta función verificará línea de comando.

int exit_code = CefExecuteProcess(main_args, app.get(), sandbox_info);

if (exit_code >= 0) {

// El proceso hijo ha salido de Listo, así que regresa aquí.

return exit_code;

}

// Especifique la configuración global de CEF aquí.

Configuración de CefSettings;

#if !CEF_ENABLE_SANDBOX

settings.no_sandbox = true;

#endif

//Inicializa CEF.

CefInitialize(main_args, settings, app.get(), sandbox_info);

// Ejecuta el bucle de mensajes CEF.

CefRunMessageLoop();

// Apagar CEF.

CefShutdown();

devuelve 0;

}

SimpleApp

SimpleApp es responsable de manejar los métodos de devolución de llamada a nivel de proceso. Expone interfaces y métodos que disfrutan múltiples procesos o que utiliza un proceso específico. La interfaz CefBrowserProcessHandler se llama en el proceso del navegador. También hay una interfaz CefBrowserProcessHandler separada (no se muestra en el proyecto de muestra), a la que solo se llama durante el proceso de renderizado. Dado que CefBrowserProcessHandler implementa no solo CefApp sino también CefBrowserProcessHandler, su valor de retorno debe ser [este].

// simple_app.h

#include "include/cef_app.h"

clase SimpleApp: CefApp pública,

pública CefBrowserProcessHandler {

público:

SimpleApp();

// método CefApp:

virtual CefRefPtr

OVERRIDE { return this }

// Método CefBrowserProcessHandler:

virtual void OnContextInitialized() OVERRIDE;

privado:

// Incluir la implementación de recuento de referencias predeterminada.

IMPLEMENT_ REFCOUNTING(SimpleApp);

};

// simple_app.cpp

#include "cefsimple/simple_app.h"

#include

#include "cefsimple/simple_handler.h"

#include " cefsimple/util.h"

#include "include/cef_browser.h"

#include "include /cef_command_line.h"

SimpleApp::SimpleApp( ) {

}

void SimpleApp::OnContextInitialized() {

REQUIRE_UI_THREAD()

// Se utiliza al crear un local. información de la ventana.

CefWindowInfo window_info;

#if define(OS_WIN)

// En Windows, debemos especificar qué se pasará a

// Ciertos indicadores para CreateWindowEx().

window_info.SetAsPopup(NULL, "cefsimple");

#endif

// SimpleHandler implementa devoluciones de llamada a nivel de navegador. CefRefPtr handler(new SimpleHandler());

// Especifique la configuración del navegador CEF aquí.

CefBrowserSettings browser_ settings;

std::string url;

// Compruebe si el valor "--url=" se proporciona a través de la línea de comando.

Si es así, utilice

// este valor en su lugar

CefRefPtr command_line =

CefCommandLine::GetGlobalCommandLine();

url = línea_comando->GetSetGlobalCommandLine();

url = línea_línea-comando->GetSwitchValue("url");

if (url.empty())

url = "";

// Crea la primera ventana del navegador. CreateBrowserSync(window_info, handler.get(), url,

browser_settings, NULL);

}

SimpleHandler

SimpleHandler es responsable para procesar el método de devolución de llamada a nivel del navegador. Estos métodos de devolución de llamada se ejecutan en el proceso del navegador. En este proyecto, todos los navegadores usan la misma instancia de CefClient, pero puedes usar diferentes instancias de CefClient en tu propia aplicación si lo prefieres.

// simple_handler.h

#include "include/cef_client.h"

#include

clase SimpleHandler: CefClient público,

CefDisplayHandler público,

CefLifeSpanHandler público,

CefLoadHandler público {

público:

SimpleHandler ();<

~SimpleHandler();

// Proporciona acceso a una única instancia global de este objeto.

estático SimpleHandler* GetInstance();

// método CefClient:

virtual CefRefPtr< CefDisplayHandler> GetDisplayHandler() OVERRIDE {

devuelve esto;

}

virtual CefRefPtr< CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE {

devuelve esto;

}

virtual CefRefPtr<.CefLoadHandler> GetLoadHandler() OVERRIDE {

devuelve esto;

}

// Método CefDisplayHandler:

virtual void OnTitleChange(CefRefPtr navegador,

const CefString& title) OVERRIDE;

// Método CefLifeSpanHandler:

virtual Método void OnAfterAfterDisplayHandler:

virtual void OnAfterCreated(CefRefPtr navegador) OVERRIDE;

virtual void OnBeforeClose(CefRefPtr navegador) OVERRIDE;

/ / Método CefLoadHandler:

virtual void OnLoadError(CefRefPtr navegador,

CefRefPtr marco,

ErrorCode errorCode,

const CefString& errorText,

const CefString& failUrl) OVERRIDE;<

// Solicita que se cierren todas las ventanas existentes del navegador.

void CloseAllBrowsers(bool force_close);

private:

// Lista de ventanas del navegador existentes.

IMPLEMENT_REFCOUNTING(SimpleHandler);

};

// simple_handler.cpp

#include "cefsimple/simple_handler.h"

#include

#include < string>

#include "cefsimple/util.h"

#include "include/cef_app.h"

#include "include/cef_runnable.h"

Espacio de nombres{

SimpleHandler* g_instance = NULL;