我以前使用插件的JS代码一般是:<OBJECT ID="VoiceCtrl" name="VoiceCtrl" CLASSID="CLSID:7DFA3E7A-1D2-4EEB-B0DF-59E7B2D9400F"> </OBJECT>,但是看到有的写法是:var fso = new ActiveXObject("VoiceIdent.VoiceCtrl"); 但是后面一种写法,调用插件接口的时候,发现插件的窗口句柄m_hWnd都为NULL,并且用后面一种方法的时候,网页上不能显示插件的界面,怎么会这个样子呢,这两个方法有什么区别呢??

解决方案 »

  1.   

    第一种写法,是当ActiveX控件用
    第二种写法,是当COM组件用。
    ActiveX除了遵守COM的协议之外,还扩展了很多接口如IViewObject,IOleControl,IOleWindow,如果用第一种写法,浏览器会QueryInterface这些接口,利用这些接口,就能创建窗口并显示。
    第二种写法,仅仅帮你创建了对象,没有帮你利用这些接口。JS的ActiveXObject名字起得就不好,让人家很容易误解,这个函数的作用跟VBS的CreateObject效果是一样的。