Activation des contrôles ActiveX dans Internet Explorer

Le MS06-013 apporte, en plus des mises à jour de sécurités, une mise à jour fonctionnelle pour Internet Explorer (912945).
Si vous travaillez avec des applications Web, il est très important d'en prendre note. En effet, si votre application Intranet ou Internet utilise des contrôles ActiveX, il y a de fortes probabilités qu'elle fonctionne mal ou ne fonctionne plus !

Qu'implique la mise à jour 912945 ?

les éléments APPLET, EMBED, OBJECT ne sont pas activés tant que l'utilisateur ne clique pas sur chaque élément. L'interaction de ces éléments avec l'utilisateur ou le script est bloquée.

 

Concrètement, cela veut dire quoi ?

Sans activation du l'utilisateur,

  • Les contrôles ActiveX ne répondent pas aux évènements de la page Web
  • L'utilisation des méthodes et propriétés des contrôles ActiveX par script n'est pas possible et provoque une erreur de script
  • L'utilisation d'un contrôle ActiveX sans interface n'est pas possible parce que l'utilisateur ne peut pas y cliquer dessus

Par contre,

  • le contrôle est instancié et s'exécute sans pouvoir interagir avec son conteneur. Par exemple, une vidéo Média Player se lancera automatiquement sans problème.

 

L'utilisateur rends le contrôle actif en cliquant sur son interface graphique. Cette opération doit être faite à chaque fois, sur chaque contrôle de la page et sur toutes les pages. Dans ce cas le contrôle n'est plus bloqué et libre d'agir :-)

Sérieusement, entre développeurs... Quel est la solution ?

La solution consiste simplement à externaliser par un script uniquement l’instanciation du contrôle ActiveX.

Voici un exemple très concret :

Sans correction

PageContenantActiveXBloque.htm

<html><body><OBJECT id="monPetitControleActiveX" codeBase="monPetitControleActiveX.cab#version=1,0,2,8" height="200" width="200" classid="CLSID:B2CCB428-85DC-4732-A6EA-B8EF363999D2"> <PARAM NAME="parametre1" VALUE="1"> <PARAM NAME="parametre2" VALUE="13"></OBJECT><script language="javascript"> monPetitControleActiveX.MaSuperMethode();</script></body></html>

 

 

Avec correction

PageContenantActiveXMaitenant.htm

<html><body><script src="InstanciationExterne.js"></script><script language="javascript">monPetitControleActiveX.MaSuperMethode();</script></body></html>

 

InstanciationExterne.js

document.write('<OBJECT id="monPetitControleActiveX" codeBase="monPetitControleActiveX.cab#version=1,0,2,8" height="200" width="200" classid="CLSID:B2CCB428-85DC-4732-A6EA-B8EF363999D2">');document.write('<PARAM NAME="parametre1" VALUE="1">');document.write('<PARAM NAME="parametre2" VALUE="13">');document.write('</OBJECT>');

 

Le tour est joué !

 

Pour plus d'informations :
Article 912945, Internet Explorer ActiveX update - https://support.microsoft.com/kb/912945/
Activating ActiveX Controls - https://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp