如何使用Javascript在运行时以编程方式检查ActiveXObject?

时间:2010-01-17 16:44:00

标签: javascript com activex runtime inspect

我希望为ActiveX对象创建一个Javascript库,实现可链接性。

例如,我希望将其替换为:

var dbEngine=new ActiveXObject('DAO.DBEngine.36');
var dbs=dbEngine.OpenDatabase('D:\\Todo.mdb');
var rs=dbs.OpenRecordset('SELECT * FROM ListItems');

用这样的东西(la jQuery):

var rs=AX('DAO.DBEngine.36')
    .OpenDatabase('D:\\Todo.mdb')
    .OpenRecordset('SELECT * FROM ListItems');

我知道我可以这样做:

var rs=new ActiveXObject('DAO.DBEngine.36')
    .OpenDatabase('D:\\Todo.mdb')
    .OpenRecordset('SELECT * FROM ListItems');

但我无法从Recordset对象访问Database对象。

为了做到这一点,AX函数应在内部创建DBEngine对象并检查其成员/属性,然后在返回的对象上公开相应的方法。

如果member / property返回一个对象,那么该对象本身将被包装在AX函数中。

1 个答案:

答案 0 :(得分:1)

只能在运行时检查实现IDispatchEx的对象。 MSDN专门列出了IDispatch和IDispatchEx之间的差异:

  

开发IDispatchEx是为了提供   IDispatch的所有服务   作为一些扩展   适合更有活力   后期语言,如脚本   语言。的附加功能   IDispatchEx超出了那些提供的   IDispatch是:

     

向对象添加新成员   ( “EXPANDO”)。

     

删除对象的成员。

     

区分大小写的调度操作。

     

使用隐式搜索成员   名。

     

枚举对象的DISPID

     

从DISPID映射到元素名称。

     

获取对象的属性   成员。

     

使用此方法调用   指针。

     

允许支持的浏览器   获取名称空间的概念   命名空间父对象。

我大胆地提出了相关问题。

正如Eric在评论中指出的那样,你可以使用foreach枚举对象的成员(或者......或者......),但是我不确定,从这个问题来看,你特别想做什么

由于并非所有ActiveX控件都会实现IDispatchEx(或者可能无法正确或完全实现IDispatchEx的所有方法),您是否需要使用特定控件?

更多细节将带来更好的答案。