Javascript регистрирует событие для объекта
-
03-07-2019 - |
Вопрос
У меня есть объект activex, который я загрузил на html-страницу.Затем я использую этот объект activex для создания другого объекта, но мне нужно зарегистрировать событие для созданного нового объекта.Объект ожидает прослушиватель событий определенного типа.
Я могу загрузить эту же dll в С#, и она будет работать нормально.Код для С# выглядит следующим образом.
upload = obj.constructUploadObj(uploadConfig);
upload.stateChanged += new UploadActionEvents_stateChangedEventHandler(upload_stateChanged);
В javascript у меня есть аналогичный код, однако я не могу зарегистрировать событие с объектом.
uploadAction = obj.constructUploadObj(uploadConfig);
uploadAction.stateChanged = upload_stateChanged;
function upload_stateChanged(sender){
writeLine("uploadState changed " + sender.getState());
}
Я перечислил некоторые свойства объекта uploadAction в javascript, чтобы убедиться, что он действительно создан.Когда я пытаюсь зарегистрировать событие с помощью uploadAction, он выдает ошибку: «Объект не поддерживает это свойство или метод».
Мне кажется, что он ожидает строго типизированного события.Есть ли способ зарегистрировать событие, подобное событию С#, в javascript?
Заранее спасибо.
Решение 3
От компании узнали, что эти свойства недоступны через JavaScript.Им потребуется внедрить их для использования в JavaScript.
Другие советы
Ваш javascript должен выглядеть примерно так:
function uploadAction::stateChanged( parms )
{
// ...
// implementation
// ...
}
Обратите внимание: это объявление статической функции, при условии, что у вас есть объект Active X с именем «uploadAction».Я знаю, что это работает — мы используем это в моей компании.
Сообщение об ошибке означает, что uploadAction не поддерживает свойство stateChanged.Ваш код JavaScript выглядит правильно, проблема, похоже, связана с объектом, к которому вы пытаетесь прикрепить обработчик событий.
Я бы предложил использовать описанную расширенную модель регистрации событий. здесь.
uploadAction.addEventListener('stateChanged', upload_stateChanged, false);
Обратите внимание: вам, возможно, придется подвергнуть сомнению ваши аргументы в пользу upload_stateChanged
метод, поскольку первым аргументом должно быть состояние события.бывший: upload_stateChanged(evt, sender)
...