17 septembre 2015
publié par 
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

//pour l'exécutable en cours
sNomExecutable=fExtraitChemin( ExeInfo(exeNom),fFichier+fExtension)
//Lecture du paramétrage actuel
nVersionIE=RegistreLit("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",sNomExecutable)
//Déjà IE 10 ou 11 de forcé ?
SI PAS nVersionIE DANS (10001,11001) ALORS
//Non
//on force IE11
nVersionIE=11001 //10001 pour IE10, 11001 pour IE11
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 :
A partir de la version 26 de WINDEV le champ HTML propose une implémentation basée sur le projet Chromium totalement intégrée au framework des applications. Il est ainsi possible de se dissocier de Internet Explorer pour le rendu et l'exécution, et d'être indépendant du système et du navigateur des postes des utilisateurs.
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 :

< Retour

5 commentaires

Guillaume Bayle
27/11/2018 - 09:35 - Répondre
Il n'est plus obligatoire de passer par la modification de la base de registre à partir de WINDEV 24. 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.

Boris JOURDAN
11/04/2019 - 17:53 - Répondre
Comme je travaille en version 21, ci-joint le code modifié pour gérer les version de système et d'application : sNomExecutable est une chaîne nVersionIE est une chaîne nVersion est un entier gsChemin_Utilise est une chaîne gsChemin_Standard est une chaîne = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION" gsChemin_Sys64_App32 est une chaîne = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION" //pour l'exécutable en cours sNomExecutable=fExtraitChemin( ExeInfo(exeNom),fFichier+fExtension) SELON VersionWindows() CAS 32 gsChemin_Utilise = gsChemin_Standard CAS 64 SELON ExeInfo(exeMode) CAS "32" gsChemin_Utilise = gsChemin_Sys64_App32 CAS "64" gsChemin_Utilise = gsChemin_Standard AUTRE CAS FIN FIN // Lecture de la valeur du User-Agent nVersionIE=RegistreLit(gsChemin_Utilise,sNomExecutable) //Déjà IE 10 ou 11 de forcé ? SI PAS nVersionIE DANS (10001,11001) ALORS //Non //on force IE11 nVersionIE=10001 //10001 pour IE10, 11001 pour IE11 SI PAS RegistreEcrit(gsChemin_Utilise,sNomExecutable,nVersionIE,RegistreTypeEntier) ALORS Erreur("Impossible de forcer la version de Internet Explorer",ErreurInfo()) FIN FIN

Christian
21/09/2020 - 15:31 - Répondre
C'est normal que ce soit HKEY_LOCAL_MACHINE pour la clé Wow6432Node ?? HKLM va nécessiter les droits admin pour écrire la valeur non ????

fbe
24/06/2020 - 11:49 - Répondre
Vous êtes sûr de vos valeurs dans vos copies d'écran pour FEATURE_BROWSER_EMULATION ?!? (1101 en décimal, alors que vous affichez des valeur 0x1101)

Guillaume Bayle
24/06/2020 - 12:12 - Répondre
Bonjour, c'est bien vu merci pour le signalement, la copie d'écran est "patchée" ! Bons développements.

Publier un commentaire : 
Votre adresse email ne sera pas publiée