Lorsqu'un champ HTML d'une application WINDEV est affecté avec l'url d'une page complète, le framework se charge de :
- effectuer une requête http avec l'adresse complète de la page,
- récupérer la réponse afin de l'afficher dans le champ HTML.
Ceci est valable dans l'éditeur, en mode test (Go), et dans l'application compilée.
L'envoi de la requête http se fait en s'appuyant sur le navigateur Internet Explorer, par défaut dans son mode de compatibilité IE 7. Le "user agent" visible par le serveur qui traite la requête recevra donc "MSIE 7.0".
Astuce : on peut avec une simple page WEBDEV en mode AWP visualiser le "user agent" de la requête envoyée par le champ HTML d'une fenêtre d'une application WINDEV :
- dans un projet WEBDEV créer une page "PAGE_TEST" en mode AWP,
- dans le code de déclaration de la page, placer le code suivant :
ChaîneAffiche(NavigateurNom())
A l'appel de cette page, le serveur web qui héberge le site ne fera que renvoyer la chaîne de caractère donnée par la fonction ChaineAffiche, au lieu d'une page complète.
- tester la page dans le navigateur (on peut voir le "user agent" du navigateur au passage),
- copier l'url complète de la page dans la barre d'adresse du navigateur,
- coller l'adresse dans la description d'un champ HTML d'une fenêtre WINDEV : dans l'éditeur ou en test, on peut ainsi voir le "user agent" utilisé par le champ HTML !
L'intérêt de cette astuce est minime, mais rappelle que l'utilisation d'une page en mode AWP combinée à ChaîneAffiche offre de très nombreuses possibilités !
Le fait que le champ HTML fasse l'interrogation en mode de compatibilité "MSIE 7.0" peut ne pas permettre l'utilisation de certaines pages. Par exemple si le champ HTML doit visualiser une page exploitant des fonctionnalités HTML 5 récentes, la page appelée peut ne pas renvoyer le résultat attendu, jugeant qu'une version de IE plus récente est nécessaire pour son interprétation. Un autre exemple, la page peut ne pas avoir le même aspect que dans un navigateur, car Internet Explorer dispose de plusieurs moteurs de rendu qu'il sélectionne en fonction du "user agent" du navigateur.
Astuce suivante : il est possible de modifier le "user agent" de la requête du champ HTML de WINDEV, via la base de registre :
- lancer l'éditeur du registre REGEDIT,
- dérouler l'arborescence jusqu'à :
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
- créer une nouvelle valeur DWORD 32 bits,
le nom de la valeur doit être celui de l'exécutable pour lequel le "user agent" doit être modifié, la donnée de la valeur doit être 11001 (décimal) pour que le "user agent" soit IE 11, 10001 si dans un cas particulier il faut "se faire passer" pour IE 10. Une liste exhaustive de valeur est disponible sur le site MSDN.
Exemple en ajoutant WDTST64.EXE dans la base de registre, l'exécutable du mode test (Go) d'une configuration de projet 64 bits, on peut voir que la page en test montre le "user agent" de IE 11 :
Alors que sans la clé de registre, le "user agent" est celui de IE 7 :
Lorsqu'une application doit obligatoirement utiliser un "user agent" déterminé pour le champ HTML, il est possible d'effectuer la mise à jour de la base de registre par programmation, par exemple en initialisation du projet :
sNomExecutable est une chaîne nVersionIE est un entier
sNomExecutable=fExtraitChemin( ExeInfo(exeNom),fFichier+fExtension)
nVersionIE=RegistreLit("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",sNomExecutable)
SI PAS nVersionIE DANS (10001,11001) ALORS nVersionIE=11001 SI PAS RegistreEcrit("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",sNomExecutable,nVersionIE) ALORS Erreur("Impossible de forcer la version de Internet Explorer",ErreurInfo()) FIN FIN
Mise à jour 27/11/2018 : Dans le cas général à partir de WINDEV 24, il n'est plus obligatoire de passer par la modification de la base de registre. En effet le volet "Avancé" de la description du projet permet de sélectionner l'utilisation de la version la plus récente de Internet Explorer / Edge pour les champs HTML du projet.
Dernière astuce, la perso-note qui va bien dans la fenêtre : lorsqu'un mode précis est forcé par programmation, ajouter une perso-note dans la fenêtre. Cela permet de garder l'information à l'esprit, afin de vérifier la pertinence de la version choisie dans le temps. En effet en forçant une version du navigateur, dans quelques années on forcera donc l'utilisation d'une ancienne version. Dans ce cas précis où Internet Explorer est censé ne plus évoluer, ça ne devrait pas être gênant ! Mais de façon générale, dès que l'on force un comportement d'un module externe, il faut penser que cela aura un impact sur l'utilisation du module externe lorsqu'il sera mis à jour.
Mise à jour 7/10/2020 :
En version 26 les champs HTML créés sont par défaut basés sur Chromium. Dans une application existante recompilée en version 26 les champs HTML existants restent en Internet Explorer, il suffit de décocher "Utiliser l'ActiveX IE pour afficher le contenu " dans leur description pour les passer en Chromium :
|