目标:用JavaScript 脚本代码调用COM控件,实现基本功能操作:
1.定义及初始化COM控件;
2.调用COM接口;
3.注册COM事件并实现事件调用。

1. 定义及初始化COM控件
     在HTML页面定义一个object标签来加载COM控件:
1) classid:是COM控件的编号,用来唯一识别一个COM控件;
2) id:是JavaScript调用COM控件时访问的对象,它是全局对象,此处将全局对象命名为ocx;
3) codebase:是打包COM的cab包资源路径。可以在后面加上#version=1,0,0,1来发布cab实现自动更新下载。

Js代码 1.<object classid="clsid:D4CCE975-3B00-417A-A520-B265FBFEB178" id="ocx" codebase="CarPlayCtrl.cab" standby="控件加载中..."></object>

<object classid="clsid:D4CCE975-3B00-417A-A520-B265FBFEB178" id="ocx" codebase="CarPlayCtrl.cab" standby="控件加载中..."></object> [用户还可以定义其它相关属性]
复制代码用浏览器(IE内核)打开页面后就可以加载COM控件。

2. 调用COM按口和属性
2.1 调用方法
     在创建COM标签时定义了一个全局对象ocx。所以之后在JavaScript代码中调用控件接口显示非常容易,类似后Java中表态访问的调用,如调用创建播放器方法:

COM接口:

Js代码 1.LONG CreatePlayer(LONG flag,ULONG decTag, BSTR streamerName, LONG playerIndex)

LONG CreatePlayer(LONG flag,ULONG decTag, BSTR streamerName, LONG playerIndex)
复制代码Javascript调用COM接口:

Js代码 1.var rtn = ocx.CreatePlayer(0, ”decTag”, ”guanhuistreamer”, -1);

2.if(rtn <0){

3.//TODO

4.}

var rtn = ocx.CreatePlayer(0, ”decTag”, ”guanhuistreamer”, -1);

if(rtn <0){

//TODO

}
复制代码CreatePlayer需要JavaScript传递4个参数进去(这里只涉及×××和字符串类型),并返回一个数字类型的值作为判断标志。

2.2 调用属性
调用属性和方法一样,只是不用再传递参数给COM,如获取播放器画面数量的属性:

Js代码 1.var screenNums = ocx.screenNum;

var screenNums = ocx.screenNum;
复制代码当然,也可以设置属性的值,如,设置播放器画面数量:

Js代码 1.ocx.screenNum = 4;

ocx.screenNum = 4;
复制代码3. 注册COM事件并实现函数回调
     我们可以调用的COM的方法和属性来实现对COM的访问和设置。
     但这样还不够,因为我们不能总是主动去调用COM的方法或属性来获取数据。比如要获取COM当前的状态(状态是不断改变的)我们就要用譬如轮询(如:window.setInterval())这样的方式不断去访问接口,这样既费时又浪费系统资源。
     所以,如果COM有一个通知事件,我们就可以将JavaScript函数注册到COM事件中,当COM执行后调用该事件时就可以间接调用JavaScript函数来实现回调。这样JavaScript就可以轻松的被动接收数据。

以下是播放器窗口焦点变化时通知JavaScript做出的相关响应的一系列实现过程:
a) ActiveScreenChanged(LONG playerIndex):是COM中的通知事件,在注册时不用带参数。
b) regOcxActiveScreen():是JavaScript中的注册事件;
c) listener_ActiveScreen(playerIndex):是JavaScript中的回调函数,在注册时不用带参数。

1) 定义JavaScript注册事件:

Js代码 1.function regOcxActiveScreen() {

2.var focus = document.getElementById("ocx");

3.if ($.browser.msie) {

4.//IE内核浏览器的注册方式

5.focus.attachEvent("ActiveScreenChanged",listener_ActiveScreen);

6.} else {

7.//非IE内核浏览器注册方式

8.//当然这里其实没有必要,因为只有IE内核浏览器才能执行此处讨论的COM组件

9.focus.addEventListener("ActiveScreenChanged",listener_ActiveScreen);

10.}

11.}

function regOcxActiveScreen() {

var focus = document.getElementById("ocx");

if ($.browser.msie) {

//IE内核浏览器的注册方式

focus.attachEvent("ActiveScreenChanged",listener_ActiveScreen);

} else {

//非IE内核浏览器注册方式

//当然这里其实没有必要,因为只有IE内核浏览器才能执行此处讨论的COM组件

focus.addEventListener("ActiveScreenChanged",listener_ActiveScreen);

}

}
复制代码[也可以直接使用:ocx.attachEvent("ActiveScreenChanged",listener_ActiveScreen);来注册就可以了,因为之前已经定义了ocx,此处只是再取一个别名。]

2) 定义JavaScript回调函数:

Js代码 1.function listener_ActiveScreen(playerIndex) {

2.    $('#currentWin').html('播放窗口:' + playerIndex);

3.//TODO

4.}

function listener_ActiveScreen(playerIndex) {

$('#currentWin').html('播放窗口:' + playerIndex);

//TODO

}
复制代码还有一种调用方式是直接在页面中通过script标签来实现的,如:

Js代码 1.<script language="JavaScript" for="ocx" event="ocxMethod(parm)">

2.alert(parm);

3.//TODO

4.</script>

<script language="JavaScript" for="ocx" event="ocxMethod(parm)">

alert(parm);

//TODO

</script> 
复制代码这种方法个人不太喜欢,代码结构完整性比较差。

转载于:https://blog.51cto.com/wws5201985/737004

JavaScript 操作 COM 控件相关推荐

  1. JavaScript操作select控件

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  2. javascript操作office控件

    //以下变量为JS公共变量 var TANGER_OCX_bDocOpen = false; var TANGER_OCX_filename;//文件名称 var filetype="&qu ...

  3. 转 JavaScript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)...

    收藏一下 1.判断select选项中 是否存在Value="paraValue"的Item 2.向select选项中 加入一个Item 3.从select选项中 删除一个Item ...

  4. Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)...

    1判断select选项中 是否存在Value="paraValue"的Item 2向select选项中 加入一个Item 3从select选项中 删除一个Item 4删除selec ...

  5. JavaScript使用ACTIVEX控件引起崩溃问题的解决

    JavaScript使用ACTIVEX控件引起崩溃问题的解决 问题 在本人目前的项目中,前端部分完全使用EXTJS基于"One-Page"理念搭建.除了一个HTML作为基本容器外, ...

  6. C# 采用系统委托的方式处理线程内操作窗体控件(转载)

    C# 采用系统委托的方式处理线程内操作窗体控件 C# / asp.net / j 2009-12-25 10:04:47 阅读138 评论0   字号:大中小 订阅 一.System.Windows. ...

  7. Javascript调用OCX控件

    什么是ocx控件? 对象链接和嵌入用户控件(OCX)是一种可以由在微软的Windows系统中运行的应用软件创建使用的特殊用途的程序. 想知道究竟的可以看看这个帖子. http://www.tososo ...

  8. javascript调用activex控件

    代码 <HTML> <BODY> <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000&quo ...

  9. c#多线程操作界面控件的简单实现

    一个小功能,早有人实现了.自己在一个项目中用到,觉得有必要记录一下,写下来. 代码 从上面你可能已经看出如何多线程操作同一个控件的,就是通过一个委托,然后定义委托方法,判断控件的InvokeRequi ...

最新文章

  1. 超强图文|并发编程【等待/通知机制】就是这个feel~
  2. eureka同步原理_eureka原理剖析
  3. JVM—内存模型JMM
  4. 李宏毅老师机器学习和深度学习
  5. 【Android 修炼手册】Gradle 篇 -- Gradle 的基本使用
  6. 使用 VSCode 开发 uniapp
  7. Eclipse和IDEA 简单对比说明
  8. linux,shell中if else if的写法,if elif
  9. json.stringfy()和json.parse()
  10. 在计算机软件中 CUI的中文意思是,长江大学 计算机基础11-12上A卷cui
  11. js键盘相关知识总结
  12. Android基于腾讯X5内核的WebView(超级浏览器)
  13. 使用opencv转化图片格式
  14. iOS亮屏解锁命令【iOS自动化测试】--使用ssh
  15. 99乘法表儿歌_乘法口诀表儿歌
  16. swustoj 143 汉诺塔
  17. LQ0264 鲁卡斯队列【精度计算】
  18. 条码打印软件里如何批量编制69商品条码?
  19. WCF服务通过TCP实时监控客户端状态,并可以向客户端广播推送消息,实现双向通信
  20. 简单理解hashMap中key相同,什么叫同一个key

热门文章

  1. iOS 版 Skype支持群组语音聊天
  2. socket:file descriptor exceeds limit (4096/4096)
  3. java.lang.Runtime
  4. Java 接口语法_JAVA接口的基本语法
  5. oracle 一个实例创建多个数据库_oracle 一个实例创建多个数据库
  6. Docker 制作镜像-redis
  7. php file_get_contents遇到https的处理办法
  8. 一文看懂软件测试方法和规范
  9. DP【洛谷P2134】 百日旅行
  10. oracle的用户自定义异常