Bonjour,
Je cherche a appeler un controle ActiveX depuis un script javascript, tout se passant en local sur la machine (pas de probleme reseau).
J'ai une page HTML qui contient un script javascript qui construit un objet ActiveX personnel et essaie d'appeler une methode dessus :
var act = new ActiveXObject("MYCONTROL.myControlCtrl.1");
act.executeCommand(1);
Lors de l'execution dans Internet Explorer, le script sort une erreur lors de l'appel de la methode en indiquant que celle-ci n'existe pas (je n'ai plus en tete l'intitule exact, mais la recherche sur le site de Microsoft avec le message exact ne donne rien de toutes facons !)
Pourtant :
1. Aucun probleme pour executer une methode d'un ActiveX standard de Windows :
// Marche tres bien
var t = new ActiveXObject("Scripting.FileSystemObject");
t.CreateFolder("C:\\Documents and Settings\\aduclert\\Mes documents\\Visual Studio Projects\\folderCreated");
=> je sais appeler un ActiveX.
2. La construction de l'objet ActiveX semble bien marcher car si je modifie le nom "MYCONTROL.myControlCtrl.1", ca plante a la construction et non a l'appel de executeCommand.
=> IE sait localiser l'ActiveX.
3. Si je declare un objet du meme controle ActiveX avec une balise <OBJECT> puis que j'appelle la meme methode, ca marche tres bien, preuve que la methode existe, est accessible et fonctionnelle :
<!-- Marche tres bien -->
<OBJECT id='myObj' classid="CLSID:F6446799-58CB-4F7E-972D-91993C997A82" codebase="myControl/Release/myControl.ocx">
</OBJECT>
<script language="javascript">
document.write("Result with static object = ");
document.write(myObj.executeCommand(2));
document.writeln("</p>");
</script>
=> La methode executeCommand est fonctionnelle.
4. Si je vais dans la base de registre, je trouve bien le CLSID indique ci-dessus sous MYCONTROL.myControlCtrl.1 et vice-versa : tout a l'air en ordre (pour autant que je puisse en juger).
5. Evidemment, j'ai decoche dans IE toutes les options de securite susceptibles de bloquer les controles ActiveX.
Le controle ActiveX a ete developpe avec Visual Studio en C++ et est tres elementaire. La methode executeCommand ne fait rien d'autre que d'incrementer l'entier passe en argument et renvoyer le resultat !
Quelqu'un a-t-il une idee sur l'origine du probleme, ou un moyen de comprendre ce qui se passe ?
Je dois preciser que je n'ai aucune experience de developpement sous Windows (je viens du monde Linux) ... mais le passage par un ActiveX est la seule facon de regler le probleme qui m'interesse.
Merci.
Aymeric Duclert
Partager