У меня есть веб-приложение, которое обрабатывает события и аудио, полученные от специализированного микрофона. Звук обрабатывается Java-апплетом, который запускается на веб-странице, но другие события (микрофон подключен, микрофон отключен, кнопка микрофона нажата) обрабатываются объектом ActiveX.
Объект ActiveX перехватывает эти события и вызывает код JavaScript для их обработки
<!-- Load the ActiveX control -->
<object id="PhilipsSpeechMikeCtrl" width="0" height="0" tabindex="-1"
classid="CLSID:AAA44754-CC81-4692-91AF-7064E58EB22A"
standby="Loading Philips SpeechMike component..."
type="application/x-oleobject">
</object>
<script type="text/javascript">
// This is Microsofts javascript way of trapping ActiveX object events.
function PhilipsSpeechMikeCtrl::SPMEventDeviceConnected(deviceID) {
// Call JavaScript code to handle the microphone connected event
}
function PhilipsSpeechMikeCtrl::SPMEventDeviceDisconnected(deviceID) {
// Call JavaScript code to handle the microphone disconnected event
}
function PhilipsSpeechMikeCtrl::SPMEventButton(deviceID, eventId) {
// Call JavaScript code to handle the microphone button pressed event
}
</script>
Конечно, проблема этого подхода в том, что он полностью зависит от IE. Я бы предпочел загрузить объект ActiveX в апплет, перехватить там события и обработать события либо в апплете, либо в коде JavaScript, вызванном из апплета. Это должно позволить мне запустить приложение в любом браузере, который поддерживает апплеты.
Я не совсем уверен, как реализовать предложенное выше решение, какие-либо предложения?
Обновление: Я понимаю, что предложенное мной решение все равно будет зависеть от IE, это нормально. Моя ближайшая цель - поддержать все браузеры в Windows.
Было высказано предположение, что вместо использования ActiveX я мог бы использовать JNI (или JNA) для доступа к библиотекам DLL, лежащим в основе объекта ActiveX. Однако на самом деле я не хочу вызывать функции в DLL, я хочу, чтобы библиотеки DLL вызывали меня, то есть регистрировали обработчик событий.
Спасибо,
Дон