在Applet中加载ActiveX对象

Dón*_*nal 1 java applet activex cross-browser

我有一个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>
Run Code Online (Sandbox Code Playgroud)

当然,这种方法的一个问题是它完全依赖于IE.我更喜欢在applet中加载ActiveX对象,在那里捕获事件并处理applet中的事件或从applet调用的JavaScript代码.这应该使我能够在任何支持applet的浏览器中运行应用程序.

我不完全确定如何实施我上面提出的解决方案,任何建议?

更新:我意识到我上面提出的解决方案仍然依赖于IE,这很好.我的直接目标是支持Windows上的所有浏览器.

有人建议,我可以使用JNI(或JNA)来访问ActiveX对象底层的DLL,而不是使用ActiveX.但是,我实际上并不想调用DLL中的函数,我希望DLL调用我,即注册一个事件处理程序.

谢谢,唐

Oli*_*ier 5

另一个浏览器不支持ActiveX,因此您的应用程序无法支持所有浏览器,即使只在Windows上也是如此.在Firefox 1下移植ActiveX的尝试(插件)已经完成,但实际上并没有用,所以据我所知,今天没有"仿真"解决方案.对不起...(有关Mozilla的评论,请参阅此处)