【发布时间】:2009-04-15 15:52:30
【问题描述】:
我有一个 Web 应用程序,它处理从专用麦克风接收的事件和音频。音频由网页中运行的 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 上的所有浏览器。
有人建议我可以使用 JNI(或 JNA)来访问 ActiveX 对象底层的 DLL,而不是使用 ActiveX。但是,我实际上并不想调用 DLL 中的函数,我希望 DLL 调用我,即注册一个事件处理程序。
谢谢, 唐
【问题讨论】:
标签: java activex applet cross-browser