V - Utilisation des contrôles ActiveX

 

Nous allons dans un premier temps examiner comment des contrôles ActiveX sont insérés dans une page web, puis nous verrons comment les interfacer avec des scripts VBS.

 

1. Insertion dans une page HTML

Dans le deuxième chapitre, nous avions brièvement présenté la méthode permettant d'insérer un contrôle à l'aide de l'ActiveX Control Pad. Il s'agissait en fait d'utiliser un tag dédié, appelé <OBJECT>. Nous allons maintenant voir plus en détail l'utilisation de ce tag.

La balise <OBJECT> admet un certain nombre d'attributs, parmi lesquels on peut citer :

Prenons un exemple d'utilisation de cette balise en précisant la syntaxe de certains attributs :

<OBJECT

CODEBASE="http://www.abcd.com/control.ocx#Version=4,70,0,1997"

CLASSID="CLSID:1A4DA620-6217-11CF-BE62-0080C72EDD2D"

ID=ctrl

>

Tout d'abord, on indique l'URL du contrôle que l'on désire inclure dans la page web. Cette URL n'est utilisée que si le contrôle n'a pas déjà été récupéré sur le poste client. On peut spécifier de façon optionnelle la version du contrôle à utiliser, de la manière précisée dans l'exemple ci-dessus. Si la version du contrôle stocké en local est plus ancienne que celle indiquée dans l'URL, il y a récupération de celui-ci. De plus, si l'on indique le numéro de version -1,-1,-1,-1, le contrôle est toujours récupéré, quel que soit son numéro de version.

L'attribut suivant est CLASSID. On reconnaît les 128 bits du GUID dont nous avons parlé dans le chapitre III, exprimés en hexadécimal. Cet identifiant doit toujours être préfixé par "CLSID" et est unique comme nous l'avons déjà dit. Rappelons également que ce GUID est stocké dans la base des registres, avec, entre autres, la localisation physique du contrôle et la version de celui-ci.

Enfin, le dernier attribut inclus dans cet exemple est ID. Il permet de donner un nom au contrôle. C'est via ce nom que l'on pourra avoir accès à celui-ci.

Nous avions également parlé de la balise <PARAMETER> dans un précédent chapitre. Cette balise permet, rappelons-le, d'indiquer un certain nombre d'arguments qui pourront être utilisés par le contrôle. Nous ne reviendrons pas sur sa structure car nous l'avons déjà présentée dans la première partie.

Il nous reste à préciser un point important : d'où viennent les contrôles que l'on peut inclure ? Tout d'abord, il faut savoir que MSIE en copie un certain nombre lors de son installation. Tout utilisateur de ce navigateur est donc susceptible de pouvoir les visionner dans une page web, sans nécessité de transfert de ceux-ci sur un site distant. Ensuite, on peut en trouver d'autres sur certains serveurs web, dont celui de Microsoft. On peut citer par ailleurs des contrôles bien utiles, comme celui permettant d'inclure de la musique en temps réel (RealAudio) ou encore d'afficher un document pdf dans le navigateur lui-même.

Tout ceci nous conduit naturellement à nous poser des questions concernant la sécurité du système vis à vis des contrôles ActiveX. En réalité, une fois qu'un contrôle est sur le disque de l'utilisateur, il peut quasiment tout faire. C'est pourquoi Microsoft a défini un système de signature des contrôles permettant de vérifier que le code téléchargé a bien été écrit par la société ou la personne qui le propose, via des certificats de sécurité gérés par une entité tierce (on parle de tiers de confiance).

Voyons maintenant comment piloter un contrôle à l'aide d'un script VBS.

 

2. Interfaçage VBS-ActiveX

Un script VBS, intégré à une page web, va nous permettre de changer les caractéristiques d'un contrôle ActiveX inséré dans la même page. Pour ce faire, il est particulièrement intéressant d'utiliser l'ActiveX Control Pad. En effet, à chaque fois qu'un contrôle est inclus dans une page web, le Control Pad va extraire les caractéristiques de ce contrôle afin de pouvoir y accéder dans un script VBS. Cette extraction se fait tout naturellement par application du format COM que nous avons vu plus haut, le Control Pad étant en effet une application reconnaissant ce format.

En pratique, on pourra :

Dans le premier cas, on peut utiliser deux attributs de la balise <SCRIPT> que nous n'avons pas présentés. Il s'agit de FOR="control_ID", qui permet d'indiquer à quel contrôle on fait référence et EVENT="nom_événement" précisant l'événement associé au script ainsi défini.

Exemple :

<SCRIPT LANGUAGE="VBScript" FOR="Ctrl1" EVENT="evt">

' code du script

</SCRIPT>

En ce qui concerne les attributs, il suffit d'utiliser l'opérateur "." dont nous avons déjà parlé. On indique donc l'attribut dont on veut lire la valeur ou que l'on veut modifier en le précédant d'un point et du nom du contrôle, spécifié dans l'attribut ID dont nous avons parlé un peu plus haut.

Exemple :

ctrl1.txt = "Nouveau texte"

Prenons un exemple fonctionnel afin d'illustrer ce mécanisme. Nous allons insérer un contrôle de type label (qui permet d'afficher du texte avec certaines propriétés) dans une page HTML puis nous modifierons ses propriétés via un programme VBScript.

Pour ce faire, on lance l'ActiveX Control Pad puis on choisit l'item Insert ActiveX Control dans le menu Edit. Une fenêtre contenant la liste des contrôles ActiveX installés sur le système apparaît alors :

Nous choisissons alors le contrôle Microsoft IE 30 Label Control. Une fenêtre d'édition similaire à celle rencontrée pour l'éditeur de layout apparaît alors. Nous allons changer trois propriétés du Label, à savoir le texte qu'il contient (Caption) mis en caractères gras (FontBold) et l'angle que fait le texte avec l'horizontale (Angle) :

 

Une fois ces modifications effectuées, on ferme la fenêtre "Edit ActiveX Control" et le code HTML correspondant est automatiquement généré et inséré dans la fenêtre d'édition. On obtient alors, en changeant le titre, le fichier HTML suivant :

<HTML>

<HEAD>

<TITLE>Exemple Active X</TITLE>

</HEAD>

<BODY>

<OBJECT ID="IeLabel1" WIDTH=137 HEIGHT=93

CLASSID="CLSID:99B42120-6EC7-11CF-A6C7-00AA00A47DD2">

<PARAM NAME="_ExtentX" VALUE="3625">

<PARAM NAME="_ExtentY" VALUE="2461">

<PARAM NAME="Caption" VALUE="Je suis un label !">

<PARAM NAME="Angle" VALUE="35">

<PARAM NAME="Alignment" VALUE="4">

<PARAM NAME="Mode" VALUE="1">

<PARAM NAME="FillStyle" VALUE="0">

<PARAM NAME="FillStyle" VALUE="0">

<PARAM NAME="ForeColor" VALUE="#000000">

<PARAM NAME="BackColor" VALUE="#C0C0C0">

<PARAM NAME="FontName" VALUE="Arial">

<PARAM NAME="FontSize" VALUE="12">

<PARAM NAME="FontItalic" VALUE="0">

<PARAM NAME="FontBold" VALUE="1">

<PARAM NAME="FontUnderline" VALUE="0">

<PARAM NAME="FontStrikeout" VALUE="0">

<PARAM NAME="TopPoints" VALUE="0">

<PARAM NAME="BotPoints" VALUE="0">

</OBJECT>

 

</BODY>

</HTML>

On reconnaît la balise <OBJECT> spécifiant un GUID ainsi qu'un certain nombre de paramètres dont ceux que nous avons modifiés. Il est maintenant possible de visualiser la page ainsi obtenue à l'aide de MSIE :

Si le contrôle Label n'est pas disponible sur la machine locale, MSIE va tenter de le récupérer automatiquement et de l'installer sur le système. Il s'affiche alors un certificat d'authenticité indiquant l'origine du contrôle. L'utilisateur peut alors accepter ou non de l'installer sur son système.

Voyons maintenant comment pouvons-nous utiliser VBScript pour modifier le texte contenu dans le label lorsque l'utilisateur clique dessus.

Utilisons à nouveau l'ActiveX Control Pad, en particulier le script wizard du menu Tools, dont nous avons déjà parlé plus haut. En mode list view nous choisissons l'événement Click du label ainsi que la propriété Caption de celui-ci. On clique ensuite sur le bouton Insert Action et nous saisissons le nouveau texte : "Vous avez cliqué !" :

 

 

 

 

Il suffit de fermer cette fenêtre pour voir apparaître le code VBScript correspondant dans la fenêtre d'édition HTML :

<SCRIPT LANGUAGE="VBScript">

<!--

Sub IeLabel1_Click()

IeLabel1.Caption = "Vous avez cliqué !"

end sub

-->

Le Control Pad a créé une procédure qui est appelée automatiquement à chaque fois que l'utilisateur clique sur le label.

Cet exemple est volontairement simple; il est cependant tout à fait possible d'imaginer des applications beaucoup plus complexes comme l'animation du texte d'un label avec ou sans intervention de l'utilisateur.