TsgcWebView2 es un nuevo componente visual de Delphi que envuelve Microsoft Edge WebView2, dándote un motor de navegador moderno basado en Chromium dentro de cualquier aplicación VCL. Añádelo a un formulario, establece una URL y tendrás un navegador embebido completo — con gestión de cookies, control de descargas, integración con JavaScript, soporte de impresión y más.
A diferencia del TEdgeBrowser incorporado que viene con las versiones recientes de Delphi, TsgcWebView2 admite todas las versiones de Delphi desde Delphi 7 hasta Delphi 13 — el soporte de versiones más amplio de cualquier wrapper de WebView2 disponible. Forma parte de la biblioteca sgcWebSockets de eSeGeCe.
Este artículo cubre su conjunto de características, muestra ejemplos prácticos de código, lo compara cara a cara con TEdgeBrowser y explica su arquitectura interna.
Resumen de características
TsgcWebView2 expone una amplia superficie del WebView2 SDK mediante eventos y métodos Delphi limpios. Estos son los doce grupos principales de capacidades:
|
Navegación Navigate, GoBack, GoForward, Reload, Stop. Admite navegación POST con cabeceras personalizadas y cuerpos de petición. |
Ejecución de JavaScript Ejecuta JavaScript de forma asíncrona o síncrona. Registra init scripts que se ejecutan automáticamente en cada carga de página. |
Gestión de cookies Obtén, añade, actualiza y elimina cookies por código. Acceso completo a los atributos de cookie incluyendo dominio, ruta y caducidad. |
|
Control de descargas Eventos para inicio, progreso y finalización de descargas. Redirige descargas a rutas personalizadas o cancélalas por completo. |
Gestión de perfiles Soporte multi-perfil para sesiones de navegación aisladas. Borra los datos de navegación (caché, cookies, historial) por perfil. |
Soporte de impresión Imprime la página actual a PDF o muestra el diálogo de impresión del sistema. Controla tamaño, orientación y márgenes del papel. |
|
Control de audio / silencio Detecta cuándo el documento reproduce audio. Activa o desactiva el silencio por código sin afectar al volumen del sistema. |
Gestión de certificados Responde a peticiones de certificado de cliente y errores de certificado de servidor mediante eventos dedicados. |
Menú contextual Intercepta y personaliza por completo el menú contextual del clic derecho. Añade, elimina o sustituye elementos del menú con tus propias acciones. |
|
Acceso al favicon Recupera el URI del favicon de la página actual. Reacciona a cambios de favicon mediante un evento dedicado. |
Mapeo de hosts virtuales Asocia hostnames personalizados a carpetas locales. Sirve archivos HTML/CSS/JS locales como si vinieran de un servidor web real. |
Captura de pantalla Guarda el contenido visible de la página como imagen PNG o JPEG. Útil para miniaturas, informes o pruebas automatizadas. |
Primeros pasos
La forma más sencilla de usar TsgcWebView2 es añadirlo a un formulario VCL y llamar a Navigate. El componente gestiona automáticamente la creación del entorno WebView2, la inicialización del controlador y el binding de la vista.
// Drop TsgcWebView2 on your form, then:
procedure TForm1.FormCreate(Sender: TObject);
begin
sgcWebView2.Navigate('https://www.example.com');
end;
procedure TForm1.sgcWebView2NavigationCompleted(Sender: TObject;
aIsSuccess: Boolean; aWebErrorStatus: Integer);
begin
if aIsSuccess then
Caption := sgcWebView2.DocumentTitle;
end;
El evento OnNavigationCompleted se dispara cuando la página termina de cargarse, indicando si la navegación tuvo éxito y el código de estado de error correspondiente. Es el lugar natural para actualizar tu interfaz — el título de la ventana, la barra de estado, el estado de los botones atrás/adelante — en función de la página cargada.
Nota. El componente crea el entorno WebView2 de forma perezosa en el primer uso. Si necesitas configurar opciones de entorno (carpeta del navegador, idioma, flags de línea de comandos), establécelas mediante la propiedad EnvironmentOptions antes de llamar a Navigate.
Gestión de cookies
El sub-objeto CookieManager expone toda la API de cookies de WebView2. Puedes listar las cookies de la URL actual, añadir o actualizar cookies con atributos concretos, y eliminar cookies individuales o borrarlas todas de una vez.
// List cookies for the current page
sgcWebView2.CookieManager.GetCookies(sgcWebView2.URL);
// Delete all cookies
sgcWebView2.CookieManager.DeleteAllCookies;
// Add a cookie
sgcWebView2.CookieManager.AddOrUpdateCookie(
'session', 'abc123', '.example.com', '/');
Cuando llamas a GetCookies, los resultados llegan de forma asíncrona en el evento OnCookiesReceived. Cada cookie incluye su nombre, valor, dominio, ruta, fecha de caducidad, flag secure y flag HTTP-only. Esta es una de las características que TEdgeBrowser no expone en absoluto.
Consejo. Utiliza AddOrUpdateCookie para inyectar tokens de autenticación antes de navegar a una página protegida. Así evitas tener que pasar por un formulario de login en escenarios de navegador embebido.
Integración con JavaScript
TsgcWebView2 ofrece tres enfoques para ejecutar JavaScript, cada uno pensado para un caso de uso distinto:
Ejecución asíncrona
Llama a ExecuteScript y gestiona el resultado en el evento OnScriptExecuted. Este es el enfoque estándar, no bloqueante.
// Async execution — result arrives in OnScriptExecuted event
sgcWebView2.ExecuteScript('document.title');
procedure TForm1.sgcWebView2ScriptExecuted(Sender: TObject;
const aResult: string; aErrorCode: Integer);
begin
if aErrorCode = 0 then
ShowMessage('Title: ' + aResult);
end;
Ejecución síncrona
Cuando necesitas el resultado inmediatamente, utiliza ExecuteScriptSync. Bloquea el hilo llamante hasta que el script termina y devuelve el resultado directamente.
var
vTitle: string;
begin
vTitle := sgcWebView2.ExecuteScriptSync('document.title');
Caption := vTitle;
end;
Init Scripts
Los init scripts se registran una vez y se ejecutan automáticamente en cada carga de página. Se ejecutan antes que cualquier JavaScript de la página, lo que los hace ideales para inyectar configuración global o polyfills.
// Runs on every page load, before any page scripts
sgcWebView2.AddInitScript('window.appVersion = "1.0";');
Gestión de descargas
Las descargas se gestionan mediante un modelo basado en eventos. Cuando empieza una descarga, el evento OnDownloadStarting te permite redirigir el archivo a una ruta personalizada, cancelarla o dejar que continúe con los valores por defecto. Un evento independiente OnDownloadCompleted se dispara cuando la descarga finaliza.
procedure TForm1.sgcWebView2DownloadStarting(Sender: TObject;
const aURI, aResultFilePath: string;
var aCancel: Boolean;
var aHandled: Boolean;
var aFilePath: string);
begin
// Redirect download to custom folder
aFilePath := 'C:\Downloads\' + ExtractFileName(aResultFilePath);
aHandled := True;
end;
procedure TForm1.sgcWebView2DownloadCompleted(Sender: TObject;
const aFilePath: string; aState: Integer);
begin
ShowMessage('Download complete: ' + aFilePath);
end;
Nota. El parámetro aState en OnDownloadCompleted indica si la descarga tuvo éxito, fue cancelada o se produjo un error. Comprueba este valor antes de procesar el archivo descargado.
Navegación POST y cabeceras personalizadas
La navegación estándar carga una URL con una petición GET. Para probar APIs, enviar formularios o cualquier escenario que requiera otro método HTTP, NavigateWithPostData te permite especificar el método, el cuerpo y las cabeceras en una sola llamada.
// Navigate with POST data and custom headers
sgcWebView2.NavigateWithPostData(
'https://api.example.com/submit',
'POST',
'{"key":"value"}',
'Content-Type: application/json' + #13#10 +
'Authorization: Bearer token123'
);
El parámetro de cabeceras admite una cadena delimitada por CRLF, siguiendo el mismo formato que usan las cabeceras HTTP. Es útil para inyectar tokens de autorización, tipos de contenido o cabeceras personalizadas que tu servidor espera.
Comparación con TEdgeBrowser
Delphi incluye TEdgeBrowser a partir de Delphi 10.4 Sydney (disponible vía GetIt desde XE7+). Proporciona un wrapper básico de WebView2, pero deja muchas características del SDK sin exponer. La siguiente tabla muestra exactamente en qué va más allá TsgcWebView2.
| Característica | TEdgeBrowser | TsgcWebView2 |
|---|---|---|
| Versiones de Delphi compatibles | Solo XE7+ | De D7 a D13 |
| Gestión de cookies | ✗ | ✓ API completa |
| Eventos de progreso de descarga | ✗ | ✓ Inicio / Progreso / Finalización |
| Perfil / borrado de datos de navegación | ✗ | ✓ |
| Control de audio / silencio | ✗ | ✓ |
| Acceso al favicon | ✗ | ✓ |
| Eventos de certificado | ✗ | ✓ |
| Eventos de Basic Auth | ✗ | ✓ |
| Texto de la barra de estado | ✗ | ✓ |
| Mapeo de hosts virtuales | ✗ | ✓ |
| Shared Buffer | ✗ | ✓ |
| ExecuteScript síncrono | ✓ | ✓ |
| Captura de pantalla | ✓ | ✓ |
| Init Script | ✓ | ✓ |
| Navegación POST | ✓ | ✓ |
| Soporte de impresión | ✓ | ✓ |
| Propiedades de diseño | Lanza excepción si el WebView no está creado | ✓ Propiedades TPersistent seguras |
| Menú contextual | Merge de PopupMenu | Control total por eventos |
| Degradación elegante | ✗ | ✓ Comprobaciones de versión por característica |
| Acceso COM directo | ✓ | ✓ |
TsgcWebView2 cubre todo lo que ofrece TEdgeBrowser y añade doce características adicionales — gestión de cookies, eventos de descarga, control de perfiles, audio/silencio, acceso al favicon, gestión de certificados, eventos de Basic Auth, texto de la barra de estado, mapeo de hosts virtuales, shared buffer, control total del menú contextual y degradación elegante. Además, admite versiones de Delphi desde Delphi 7, mientras que TEdgeBrowser requiere XE7 como mínimo.
Importante. TEdgeBrowser guarda sus ajustes directamente en las interfaces COM. Si configuras una propiedad en tiempo de diseño antes de que se cree el entorno WebView2, lanza una access violation. TsgcWebView2 lo evita por completo utilizando sub-objetos TPersistent que almacenan los ajustes y los aplican cuando el entorno está listo.
Características avanzadas
Impresión a PDF
Genera un PDF de la página actual con una sola llamada al método. El archivo de salida se crea de forma asíncrona y puedes controlar el tamaño del papel, los márgenes y la orientación mediante parámetros.
sgcWebView2.PrintToPdf('C:\output\page.pdf');
Captura de pantalla
Captura el área visible de la página como una imagen PNG o JPEG. El segundo parámetro especifica el formato de imagen: 0 para PNG, 1 para JPEG.
sgcWebView2.CapturePreviewToFile('C:\screenshots\page.png', 0); // 0 = PNG
Mapeo de hosts virtuales
Asocia un hostname personalizado a una carpeta local para que tu navegador embebido pueda cargar archivos locales mediante URLs HTTPS estándar. Evitas problemas de CORS y haces que el contenido local se comporte exactamente como contenido remoto.
// Serve local files via https://app.local/
sgcWebView2.SetVirtualHostNameToFolderMapping(
'app.local', 'C:\MyApp\WebContent', 1);
sgcWebView2.Navigate('https://app.local/index.html');
Consejo. El mapeo de hosts virtuales es especialmente útil para aplicaciones single-page. Empaqueta tu HTML, CSS y JavaScript junto con tu aplicación Delphi y cárgalo a través de un hostname mapeado para tener acceso completo a las web APIs que requieren un origen seguro.
Control de audio y silencio
Detecta cuándo el documento cargado está reproduciendo audio y silencia sin afectar al volumen del sistema. Es útil para aplicaciones que embeben contenido con mucho contenido multimedia.
sgcWebView2.IsMuted := True;
if sgcWebView2.IsDocumentPlayingAudio then
ShowMessage('Audio is playing');
Arquitectura y diseño
TsgcWebView2 se construye sobre una arquitectura limpia en tres capas que separa responsabilidades manteniendo simple la API que ve el desarrollador:
- Capa de API (interfaces COM). Traducciones directas de las interfaces COM de Microsoft WebView2 a Delphi. Son los bloques de construcción crudos — de bajo nivel, específicos de cada versión, y no pensados para usarse directamente en el código de aplicación.
- Capa de clases (wrappers). Clases wrapper nativas de Delphi que gestionan la vida de los objetos COM, enrutan los callbacks y ofrecen una API orientada a objetos limpia. Esta capa te aísla de las complicaciones de COM.
- Capa de componente (visual). El propio componente
TsgcWebView2— un descendiente de TWinControl que sueltas en un formulario. Publica propiedades, eventos y métodos que mapean a la capa de clases inferior.
Para usuarios avanzados que necesiten acceso a características del SDK aún no envueltas por el componente, las interfaces COM directas están disponibles a través de las propiedades WebView, Controller y Environment. Puedes invocar cualquier método COM directamente sin perder la gestión del ciclo de vida del componente.
Degradación elegante
No todas las características de WebView2 están disponibles en todas las versiones del runtime de Edge. TsgcWebView2 comprueba la versión del runtime instalada al arrancar y expone un método Supports() para que puedas consultar la disponibilidad de una característica antes de invocarla. Esto evita errores en tiempo de ejecución en máquinas con versiones antiguas de Edge.
Seguridad en tiempo de diseño
Todos los ajustes configurables se exponen como sub-objetos TPersistent. Puedes configurar el componente con seguridad en tiempo de diseño desde el Object Inspector sin disparar la inicialización de COM. Los ajustes se almacenan y se aplican automáticamente cuando se crea el entorno WebView2 en tiempo de ejecución.
Requisitos
Para utilizar TsgcWebView2 en tu aplicación necesitas:
- Microsoft Edge WebView2 Runtime. Incluido con Windows 10 (versión 1803+) y Windows 11. Para versiones anteriores de Windows o despliegues controlados, descarga el Evergreen Bootstrapper o el runtime Fixed Version desde Microsoft.
- WebView2Loader.dll. Incluido con el componente. Colócalo junto al ejecutable de tu aplicación. Esta pequeña DLL se encarga de la detección y carga del runtime.
- Solo Windows. WebView2 es una tecnología de Windows. El componente está orientado a aplicaciones VCL sobre Windows 7 y posteriores (se recomienda Windows 10/11 para el soporte completo de características).
Nota. Puedes comprobar si el runtime de WebView2 está instalado antes de crear el componente. Si no lo está, puedes indicar al usuario que lo instale o recurrir a un control de navegador alternativo.
Conclusión
TsgcWebView2 es el wrapper de WebView2 más completo disponible para Delphi. Es un superconjunto estricto de TEdgeBrowser, añadiendo doce características que el componente integrado de Embarcadero no expone — gestión de cookies, eventos de descarga, control de perfiles, detección de audio, acceso al favicon, gestión de certificados, autenticación básica, texto de la barra de estado, mapeo de hosts virtuales, shared buffer, control total del menú contextual y degradación elegante.
Admite el rango más amplio de versiones de Delphi de cualquier wrapper de WebView2, desde Delphi 7 hasta Delphi 13. Tanto si mantienes una aplicación heredada en un compilador antiguo como si construyes un nuevo proyecto en el último Delphi, el mismo componente y la misma API funcionan en cualquier sitio.
La API está pensada para ser fácil de aprender — suelta el componente en un formulario, llama a Navigate y gestiona los eventos — pero a la vez es lo suficientemente potente para escenarios avanzados gracias al acceso COM directo y a la comprobación de versiones por característica. Para los desarrolladores Delphi que necesitan un navegador embebido moderno, TsgcWebView2 es la elección natural.
