2010-01-17 4 views
-1

Je cherche à créer une bibliothèque Javascript pour les objets ActiveX, permettant la mise en chaîne.Comment puis-je inspecter par programme un ActiveXObject à l'exécution, en utilisant Javascript?

Par exemple, je cherche à remplacer:

var dbEngine=new ActiveXObject('DAO.DBEngine.36'); 
var dbs=dbEngine.OpenDatabase('D:\\Todo.mdb'); 
var rs=dbs.OpenRecordset('SELECT * FROM ListItems'); 

avec quelque chose comme ça (la jQuery):

var rs=AX('DAO.DBEngine.36') 
    .OpenDatabase('D:\\Todo.mdb') 
    .OpenRecordset('SELECT * FROM ListItems'); 

Je sais que je peux le faire:

var rs=new ActiveXObject('DAO.DBEngine.36') 
    .OpenDatabase('D:\\Todo.mdb') 
    .OpenRecordset('SELECT * FROM ListItems'); 

mais je n'ai aucun moyen d'accéder à l'objet Database à partir de l'objet Recordset. Pour ce faire, la fonction AX doit créer l'objet DBEngine en interne et inspecter ses membres/propriétés, puis exposer les méthodes correspondantes sur l'objet retourné.

Si le membre/propriété renvoie un objet, cet objet lui-même sera renvoyé dans la fonction AX.

+0

Assurez-vous que le moteur JScript ne le permet pas. AFAIK, IDispatchEx (utilisé par les objets DOM dans IE) permet une énumération limitée des méthodes et propriétés, mais à moins que tous les objets exposent diligemment cette interface, vous êtes bloqué. Et oui, c'est très regrettable. – Shog9

+0

Il y a toujours de la force brute ;-) – bobince

+0

Vous ne pouvez rien appeler dans un objet AX à moins qu'il ne soit exposé par IDispatch. Mais la question initiale est assez floue: qu'essayez-vous exactement de faire? Vous pouvez utiliser le mécanisme foreach dans JavaScript pour énumérer les membres exposés d'un objet. – EricLaw

Répondre

1

Seuls les objets qui implémentent IDispatchEx peuvent être inspectés lors de l'exécution. MSDN énumère précisément les différences entre IDispatch et IDispatchEx:

IDispatchEx a été développé pour fournir tous les services de IDispatch ainsi que certaines extensions qui sont appropriées pour plus dynamiques langues liaison tardive telles que les langages de script . Les caractéristiques supplémentaires de IDispatchEx au-delà de celles fournies par IDispatch sont:

Ajouter de nouveaux membres à un objet (« expando »).

Supprime les membres d'un objet.

Opérations de répartition sensibles à la casse. Rechercher un membre avec le nom implicite .

Énumérer les DISPID d'un objet.

Mappage de DISPID au nom de l'élément. Obtenez les propriétés de l'objet membres.

Appel de méthode avec ce pointeur .

Autoriser les navigateurs prenant en charge le concept d'espaces de noms pour obtenir le parent d'un objet.

J'ai mis en gras le problème pertinent. Comme Eric le fait remarquer dans les commentaires, vous pouvez utiliser énumérer les membres des objets en utilisant foreach (ou pour ... dans peut-être?), Mais je ne suis pas sûr, de la question, de ce que vous voulez spécifiquement faire.

Étant donné que tous les contrôles ActiveX n'implémenteront pas IDispatchEx (ou n'implémenteront pas toutes les méthodes d'IDispatchEx correctement ou complètement), y a-t-il des contrôles spécifiques avec lesquels vous souhaitez jouer?

Plus de détails conduiront à de meilleures réponses.

Questions connexes