Microsoft Edge WebView2 Delphi

· Composants

TsgcWebView2 est un nouveau composant Delphi visuel qui encapsule Microsoft Edge WebView2 : tu obtiens ainsi un moteur de navigateur moderne basé sur Chromium à l'intérieur de n'importe quelle application VCL. Pose-le sur une fiche, définis une URL et tu as un navigateur embarqué complet — gestion des cookies, contrôle des téléchargements, intégration JavaScript, support d'impression et plus.

Contrairement au TEdgeBrowser intégré aux versions récentes de Delphi, TsgcWebView2 prend en charge toutes les versions de Delphi 7 à Delphi 13 — le support de versions le plus large parmi tous les wrappers WebView2 disponibles. Il fait partie de la bibliothèque sgcWebSockets d'eSeGeCe.

Cet article couvre l'ensemble de ses fonctionnalités, montre des exemples de code pratiques, le compare directement à TEdgeBrowser et explique son architecture interne.

Aperçu des fonctionnalités

TsgcWebView2 expose une large surface du SDK WebView2 via des événements et méthodes Delphi propres. Voici les douze grands groupes de capacités :

Navigation
Navigate, GoBack, GoForward, Reload, Stop. Prend en charge la navigation POST avec en-têtes personnalisés et corps de requête.
Exécution JavaScript
Exécute du JavaScript de façon asynchrone ou synchrone. Enregistre des scripts d'init qui s'exécutent automatiquement à chaque chargement de page.
Gestion des cookies
Récupère, ajoute, met à jour et supprime des cookies par programmation. Accès complet aux attributs des cookies, y compris domaine, chemin et expiration.
Contrôle des téléchargements
Événements pour le démarrage, la progression et la fin des téléchargements. Redirige les téléchargements vers des chemins personnalisés ou annule-les entièrement.
Gestion des profils
Support multi-profils pour des sessions de navigation isolées. Efface les données de navigation (cache, cookies, historique) par profil.
Support d'impression
Imprime la page actuelle au format PDF ou affiche la boîte de dialogue d'impression système. Contrôle la taille du papier, l'orientation et les marges.
Contrôle audio / mute
Détecte quand le document joue de l'audio. Bascule l'état mute par programmation sans affecter le volume système.
Gestion des certificats
Réponds aux demandes de certificat client et aux erreurs de certificat serveur via des événements dédiés.
Menu contextuel
Intercepte et personnalise entièrement le menu contextuel du clic droit. Ajoute, supprime ou remplace les éléments du menu par tes propres actions.
Accès au favicon
Récupère l'URI du favicon de la page actuelle. Réagis aux changements de favicon via un événement dédié.
Mapping d'hôte virtuel
Associe des noms d'hôte personnalisés à des dossiers locaux. Sers des fichiers HTML/CSS/JS locaux comme s'ils venaient d'un vrai serveur web.
Capture d'écran
Sauvegarde le contenu visible de la page comme image PNG ou JPEG. Utile pour les vignettes, les rapports ou les tests automatisés.

Premiers pas

La façon la plus simple d'utiliser TsgcWebView2 est de le poser sur une fiche VCL et d'appeler Navigate. Le composant gère automatiquement la création de l'environnement WebView2, l'initialisation du contrôleur et la liaison de la vue.

// 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;

L'événement OnNavigationCompleted se déclenche après la fin du chargement de la page : il indique si la navigation a réussi et le code de statut d'erreur éventuel. C'est l'endroit naturel pour mettre à jour ton interface — titre de fenêtre, barre de statut, état des boutons précédent/suivant — en fonction de la page chargée.

Note. Le composant crée l'environnement WebView2 paresseusement à la première utilisation. Si tu dois configurer des options d'environnement (dossier du navigateur, langue, switches de ligne de commande), définis-les via la propriété EnvironmentOptions avant d'appeler Navigate.

Gestion des cookies

Le sous-objet CookieManager expose l'API complète des cookies WebView2. Tu peux lister les cookies pour l'URL courante, ajouter ou mettre à jour des cookies avec des attributs spécifiques, et supprimer des cookies individuels ou tous les effacer d'un coup.

// 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', '/');

Quand tu appelles GetCookies, les résultats arrivent de façon asynchrone dans l'événement OnCookiesReceived. Chaque cookie inclut son nom, sa valeur, son domaine, son chemin, son expiration, son flag secure et son flag HTTP-only. C'est l'une des fonctionnalités que TEdgeBrowser n'expose pas du tout.

Astuce. Utilise AddOrUpdateCookie pour injecter des jetons d'authentification avant de naviguer vers une page protégée. Cela évite le besoin d'un flux de formulaire de connexion dans les scénarios de navigateur embarqué.

Intégration JavaScript

TsgcWebView2 propose trois approches d'exécution JavaScript, chacune adaptée à un cas d'usage différent :

Exécution asynchrone

Appelle ExecuteScript et gère le résultat dans l'événement OnScriptExecuted. C'est l'approche standard, non bloquante.

// 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;

Exécution synchrone

Quand tu as besoin du résultat immédiatement, utilise ExecuteScriptSync. Cela bloque le thread appelant jusqu'à ce que le script se termine et renvoie directement le résultat.

var
  vTitle: string;
begin
  vTitle := sgcWebView2.ExecuteScriptSync('document.title');
  Caption := vTitle;
end;

Scripts d'init

Les scripts d'init sont enregistrés une fois et s'exécutent automatiquement à chaque chargement de page. Ils s'exécutent avant tout JavaScript de page, ce qui les rend idéaux pour injecter une configuration globale ou des polyfills.

// Runs on every page load, before any page scripts
sgcWebView2.AddInitScript('window.appVersion = "1.0";');

Gestion des téléchargements

Les téléchargements sont gérés via un modèle événementiel. Quand un téléchargement commence, l'événement OnDownloadStarting te permet de rediriger le fichier vers un chemin personnalisé, de l'annuler ou de le laisser continuer avec les valeurs par défaut. Un événement distinct OnDownloadCompleted se déclenche à la fin du téléchargement.

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;

Note. Le paramètre aState dans OnDownloadCompleted indique si le téléchargement a réussi, a été annulé ou a rencontré une erreur. Vérifie cette valeur avant de traiter le fichier téléchargé.

Navigation POST et en-têtes personnalisés

La navigation standard charge une URL avec une requête GET. Pour les tests d'API, la soumission de formulaires ou tout scénario qui nécessite une méthode HTTP différente, NavigateWithPostData te permet de spécifier la méthode, le corps et les en-têtes en un seul appel.

// 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'
);

Le paramètre headers accepte une chaîne délimitée par CRLF, suivant le même format que les en-têtes HTTP. C'est utile pour injecter des jetons d'autorisation, des content-types ou des en-têtes personnalisés attendus par ton serveur.

Comparaison avec TEdgeBrowser

Delphi inclut TEdgeBrowser à partir de Delphi 10.4 Sydney (disponible via GetIt pour XE7+). Il fournit un wrapper WebView2 de base, mais laisse de nombreuses fonctionnalités du SDK non exposées. Le tableau suivant montre exactement où TsgcWebView2 va plus loin.

Fonctionnalité TEdgeBrowser TsgcWebView2
Versions de Delphi prises en charge XE7+ uniquement D7 à D13
Gestion des cookies API complète
Événements de progression des téléchargements Démarrage / progression / fin
Profil / effacement des données de navigation
Contrôle audio / mute
Accès au favicon
Événements de certificat
Événements d'authentification basic
Texte de la barre de statut
Mapping d'hôte virtuel
Shared Buffer
ExecuteScript synchrone
Capture d'écran
Script d'init
Navigation POST
Support d'impression
Paramètres au design-time Lève une exception si WebView non créé Propriétés TPersistent sûres
Menu contextuel Fusion PopupMenu Contrôle complet par événement
Dégradation gracieuse Vérifications de version par fonctionnalité
Accès COM brut

TsgcWebView2 couvre tout ce que propose TEdgeBrowser et ajoute douze fonctionnalités — gestion des cookies, événements de téléchargement, contrôle des profils, audio/mute, accès au favicon, gestion des certificats, événements d'authentification basic, texte de barre de statut, mapping d'hôte virtuel, shared buffer, contrôle complet du menu contextuel et dégradation gracieuse. Il prend également en charge les versions de Delphi jusqu'à Delphi 7, alors que TEdgeBrowser exige au minimum XE7.

Important. TEdgeBrowser stocke ses paramètres directement sur les interfaces COM. Si tu définis une propriété au design-time avant la création de l'environnement WebView2, il lève une violation d'accès. TsgcWebView2 évite cela entièrement en utilisant des sous-objets TPersistent qui mettent en tampon les paramètres et les appliquent quand l'environnement est prêt.

Fonctionnalités avancées

Impression en PDF

Génère un PDF de la page actuelle avec un seul appel de méthode. Le fichier de sortie est créé de façon asynchrone et tu peux contrôler la taille du papier, les marges et l'orientation via les paramètres.

sgcWebView2.PrintToPdf('C:\output\page.pdf');

Capture d'écran

Capture la zone visible de la page comme image PNG ou JPEG. Le second paramètre spécifie le format d'image : 0 pour PNG, 1 pour JPEG.

sgcWebView2.CapturePreviewToFile('C:\screenshots\page.png', 0); // 0 = PNG

Mapping d'hôte virtuel

Associe un nom d'hôte personnalisé à un dossier local pour que ton navigateur embarqué puisse charger des fichiers locaux via des URL HTTPS standard. Cela évite les problèmes CORS et fait en sorte que le contenu local se comporte exactement comme du contenu distant.

// Serve local files via https://app.local/
sgcWebView2.SetVirtualHostNameToFolderMapping(
  'app.local', 'C:\MyApp\WebContent', 1);
sgcWebView2.Navigate('https://app.local/index.html');

Astuce. Le mapping d'hôte virtuel est particulièrement utile pour les applications single-page. Empaquète ton HTML, CSS et JavaScript avec ton application Delphi, puis charge-les via un nom d'hôte mappé pour obtenir un accès complet aux API web qui exigent une origine sécurisée.

Contrôle audio et mute

Détecte quand le document chargé joue de l'audio et bascule mute sans affecter le volume système. C'est utile pour les applications qui embarquent du contenu média lourd.

sgcWebView2.IsMuted := True;
if sgcWebView2.IsDocumentPlayingAudio then
  ShowMessage('Audio is playing');

Architecture et conception

TsgcWebView2 est construit sur une architecture propre à trois couches qui sépare les responsabilités tout en gardant l'API tournée vers le développeur simple :

Pour les utilisateurs avancés qui ont besoin d'accéder à des fonctionnalités du SDK pas encore encapsulées par le composant, les interfaces COM brutes sont accessibles via les propriétés WebView, Controller et Environment. Tu peux appeler n'importe quelle méthode COM directement tout en bénéficiant de la gestion du cycle de vie du composant.

Dégradation gracieuse

Toutes les fonctionnalités WebView2 ne sont pas disponibles dans toutes les versions du runtime Edge. TsgcWebView2 vérifie la version du runtime installée au démarrage et expose une méthode Supports() pour interroger la disponibilité d'une fonctionnalité avant de l'appeler. Cela évite les erreurs runtime sur les machines avec des versions Edge plus anciennes.

Sécurité au design-time

Tous les paramètres configurables sont exposés comme sous-objets TPersistent. Tu peux configurer en toute sécurité le composant au design-time dans l'Object Inspector sans déclencher d'initialisation COM. Les paramètres sont mis en tampon et appliqués automatiquement quand l'environnement WebView2 est créé au runtime.

Prérequis

Pour utiliser TsgcWebView2 dans ton application, tu as besoin de :

Note. Tu peux vérifier si le runtime WebView2 est installé avant de créer le composant. S'il n'est pas présent, tu peux orienter l'utilisateur vers son installation ou te rabattre sur un autre contrôle de navigateur.

Conclusion

TsgcWebView2 est le wrapper WebView2 le plus complet disponible pour Delphi. C'est un sur-ensemble strict de TEdgeBrowser, qui ajoute douze fonctionnalités que le composant intégré d'Embarcadero n'expose pas — gestion des cookies, événements de téléchargement, contrôle des profils, détection audio, accès au favicon, gestion des certificats, authentification basic, texte de barre de statut, mapping d'hôte virtuel, shared buffer, contrôle complet du menu contextuel et dégradation gracieuse.

Il prend en charge la plus large plage de versions de Delphi de tous les wrappers WebView2, de Delphi 7 à Delphi 13. Que tu maintiennes une application legacy sur un compilateur plus ancien ou que tu construises un nouveau projet sur le dernier Delphi, le même composant et la même API fonctionnent partout.

L'API est conçue pour être facile à apprendre — pose le composant sur une fiche, appelle Navigate et gère les événements — tout en restant assez puissante pour les scénarios avancés via l'accès COM brut et la vérification de version par fonctionnalité. Pour les développeurs Delphi qui ont besoin d'un navigateur embarqué moderne, TsgcWebView2 est le choix naturel.