昨天有个问题,具体见链接http://topic.csdn.net/u/20091111/21/d5175b98-88f8-4059-b4e7-f11eddc7105e.html但是经过测试发现
var act = new ActiveXObject()
得到的对象和用
<object classid="..." id="oo">
var obj = document.getElementById("oo")
得到的对象似乎不太一样我的activeX中有个attachEvent(eventName, func)方法用于回调JS的函数,在obj对象中可用,但是act就报"对象不支持此属性或方法"
但是activeX中的其它方法却是2者都可以正常调用
这是怎么回事呢?

解决方案 »

  1.   

    1:创建ActiveX对象
       在web中使用ActiveX组件有两种方法,一是如下
    <HTML>
    <HEAD>
    <TITLE>rep_print_medcan.CAB</TITLE>
    </HEAD>
    <BODY>
    <OBJECT ID="Rep_Print_MedCan21"
    CLASSID="CLSID:C0558D51-6AFD-11D5-BF5C-005070024001"
    CODEBASE="rep_print_medcan.CAB#version=1,0,0,25">
    </OBJECT>
    </BODY>
    </HTML>
    OBJECT标签中,通过ID指点了对象的ID号,javascript可以使用该ID号来引用该对象,而classid用于标识这个组件,每个ActiveX组件都有唯一一个用于表示他的ID号。而codebase指定的程序下载到本地(在系统目录的“Downloaded Program Files”子目录下),然后调用组件程序的自注册入口函数注册到当前系统中,以后的创建都在本地进行,不再涉及codebase属性
     使用以上的方法来创建ActiveX对象,有些参数设置需要手抖的填写,麻烦,另外可以使用javascript的ActiveXObject对象来创建,一般过程是var act=new ActiveXObject(proid),proid为该ActiveX的标识号,是Classid的另一种表示方法
      

  2.   

    TO 1楼:
    您说的是调用activeX的2种方法,我现在classid和progid都是对的,而且2种方式获得的对象也可以用,但似乎只是在回调函数上有所区别,用new ActiveXObject(...)得到的对象无法调用ocx的回调函数,而用<object ...>得到的对象却可以,我想问下这是什么原因.这是不是和ocx的实现有所关联?
    那个回调函数attachEvent(eventName, func)用VS的activeX Control Test Container工具是看不见的,所以我在想,其中是不是会有其他原因感谢
      

  3.   

    查了一下,大概是这样:
    attachEvent(...)方法并不是ocx的方法,而是DOM的方法,在这里也就是<object>的方法,当用<object..>加载ocx的时候,ocx被<object..>包装了一下,当ocx中抛出某个事件的时候,<object>就收到了这个事件,而你又通过attectEvent(...)为<object>绑定了事件的调用函数,所以....而用new ActiveXObject()的时候得到的对象并不是一个DOM对象,所以本身不具有attachEvent(...)方法
    此时就需要ocx自己去实现这个方法,那是另外一个问题了.不知道是否正确,请指正感谢
      

  4.   

    我想问一下插件类的proid怎么获取????