Событие OnReadyStateChange в элементах управления ActiveX - PullRequest
1 голос
/ 17 февраля 2009

Я написал плагин Firefox (совместимый только с банкоматом FF3), который позволяет размещать элементы управления ActiveX.
До того, как начинается пламя - это не главная тема для этого вопроса, и плагин был разработан с учетом безопасности, чтобы он не сломал мой любимый браузер. если вы заинтересованы, он размещен на http://code.google.com/p/ff-activex-host/.

Теперь я заметил, что в IE все элементы управления ActiveX имеют доступное событие OnReadyStateChange, однако не у всех элементов управления ActiveX это событие указано в их TypeLib. В результате мой плагин не может зарегистрировать обработчики для этого события для каждого элемента управления ActiveX.

Открывая такие элементы управления с помощью OleView, я также не могу найти событие OnReadyStateChange, что наводит меня на мысль, что IE может «обманывать», чтобы заставить его работать. Когда OleView показывает такой обработчик (как с элементом управления Shockwave ActiveX), у меня нет проблем с регистрацией обработчиков для него.

Примером такого элемента управления является Microsoft Terminal Services ActiveX. Но это не проблема, ограниченная элементами управления MS ActiveX.

Я не эксперт по COM-объектам, я ищу событие неправильно или в неправильном месте?
Прямо сейчас я думаю, что все делаю правильно, поскольку OleView тоже не может его найти, так что ...

Могу ли я как-то «обмануть» так же, как это делает IE, и сделать это событие доступным?

1 Ответ

2 голосов
/ 17 февраля 2009

Да, IE будет обманывать. То, что вы на самом деле имеете в IE, это то, что в мире COM мы называем агрегатный объект. IE создаст экземпляр класса COM, который он использует для представления объектов ActiveX, и объединит его с фактическим экземпляром класса ActiveX, создав составной объект.

Этот композит выглядит как отдельный объект с новыми функциями.

Поэтому я не думаю, что вам вообще нужно беспокоиться об OnReadyStateChange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...