2009-06-30 6 views
3

J'essaie d'ajouter dynamiquement un contrôle ActiveX à une page en utilisant jQuery. L'append est réussi. cependant, le contrôle ne s'initialise pas lorsqu'il est fait de cette façon. Je crois que IE appelle la méthode OnCreate d'un contrôle ActiveX quand une page qui contient un contrôle a fini de rendre. Le problème est que la balise n'est pas présente sur la page tant que le rendu n'est pas terminé, ainsi OnCreate n'est jamais appelé.Possibilité d'ajouter un contrôle ActiveX à une page en utilisant javascript?

Je ne sais pas si c'est le problème, c'est juste une supposition. Est-ce que quelqu'un a de l'expérience avec ça? Est-il possible de forcer IE à appeler OnCreate à un moment précis?

Le contrôle fonctionne correctement si la balise est dans le code HTML. La seule fois où je vois des problèmes, c'est quand j'ajoute l'objet à la page via javascript.

Mise à jour: Je dois savoir ce que IE lorsqu'il rencontre un

<object> 
tag

sur la page au moment du rendu. Le contrôle fonctionne bien dans ce contexte, donc IE appelle quelque chose à ce moment-là. Je dois l'invoquer manuellement après avoir ajouté le contrôle au rendu de post page.

Merci, Pete

+0

Code? :) –

+0

Excusez-moi? jQuery ('body'). append (activeX); Tu as vraiment besoin de voir ça? – slypete

+0

Oui, nous le faisons. Demander aux autres d'essayer de déboguer dans le noir est une mauvaise idée, car la première hypothèse est que vous ne savez pas ce que vous faites. – EricLaw

Répondre

1

Vous pouvez instancier le contrôle d'une manière totalement multi-plateforme-hostile à l'aide de nouveaux ActiveXObject (ProgID). ProgID est une chaîne de la forme "appName.typeName". par exemple,

var excel; 
excel = new ActiveXObject("Excel.Application"); 
... 

L'exemple ne fonctionnera que si Excel est installé sur votre machine.

+0

Merci, pouvez-vous expliquer le nom ici, blah.blah? J'ai le code source du contrôle, donc j'ai juste besoin de savoir quoi chercher. Actuellement, tout ce que je fournis est CLSID et codebase cab dans un tag d'objet. – slypete

+0

Savez-vous ce que ce sont? Par exemple, Application dans l'exemple ci-dessus implémente-t-elle cette interface IDispatch? J'ai un contrôle ActiveX personnalisé dont j'ai besoin pour déterminer ces valeurs. – slypete

0

J'ai eu un problème similaire au vôtre aujourd'hui avec une applet Java sous IE. Ma solution de contournement (j'ai voulu mettre l'applet après que la page ait fini de rendre) était de créer dynamiquement iframe invisible avec src pointant vers la page HTML simple avec mon applet. Après le chargement de iframe, j'ai appelé son parent pour notifier que l'applet a été chargée.

+0

Je ne peux pas utiliser un iframe puisque ce contrôle est en cours de chargement dans une structure de widget qui supporte le glisser-déposer. – slypete

Questions connexes