目标:用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实现自动更新下载。
<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接口:
LONG CreatePlayer(LONG flag,ULONG decTag, BSTR streamerName, LONG playerIndex)
Javascript调用COM接口:
var rtn = ocx.CreatePlayer(0, ”decTag”, ”guanhuistreamer”, -1);
if(rtn <0){
//TODO
}
CreatePlayer需要JavaScript传递4个参数进去(这里只涉及整形和字符串类型),并返回一个数字类型的值作为判断标志。
2.2 调用属性
调用属性和方法一样,只是不用再传递参数给COM,如获取播放器画面数量的属性:
var screenNums = ocx.screenNum;
当然,也可以设置属性的值,如,设置播放器画面数量:
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注册事件:
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回调函数:
function listener_ActiveScreen(playerIndex) {
$('#currentWin').html('播放窗口:' + playerIndex);
//TODO
}
还有一种调用方式是直接在页面中通过script标签来实现的,如:
<script language="JavaScript" for="ocx" event="ocxMethod(parm)">
alert(parm);
//TODO
</script>
这种方法个人不太喜欢,代码结构完整性比较差。
分享到:
相关推荐
Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等
c# javascript 操作 listBox控件
c# javascript 操作 checkBox控件
Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
主要是对如何通过javascript操作web控件的自定义属性进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所 帮助
用javascript(C#)操作 asp .net 的DropDownList控件
Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等) JavaScript 1判断select选项中 是否存在Value="paraValue"的Item 2向select选项中 加入一个Item 3从select选项中 删除一个Item...
Gridview批量删除,批量更新,批量修改都会用到Javascript对控件进行批量操作。这个例子很简单,但是注释写的很清楚。
主要介绍了Javascript操作select控件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
几乎HTML所有标记都可以说是HTML的控件,如select, input, div, table等。html标签便捷的操作,深受大家的喜欢。如何使用javascript来操作HTML控件,下面我介绍下比较麻烦的几个控件
在用户自定义控件中我们如果需要嵌入一些资源,如JavaScript可以有两种方式,一种就是在控件中拼接字符串,但是这样不仅暴露了我们的一些代码,而且操作起来很麻烦,比较简单的JavaScript还可以勉强接受,但是如果...
功能强大的JavaScript日历控件 最关键的,无偿的永久的提供给大家免费使用,含全部源代码。 功能简介: 一、更人性化,更全面的功能 大部分日期控件都具备这些功能,但是本日历控件做的更全面,更人性化,并且速度...
网上有很多讲JavaScript操作客户端串口的资料,可都是一样的,在开发过程中还是会有一些问题,这里是我开发时的一些总结
JavaScript的一些教程和参考手册: JavaScript 语言参考.chm JavaScript帮助教程.chm JAVASCRIPT教程手册.chm javascript手册.CHM ...Javascript 操作select控件大全.txt 欢迎大家下载,希望对你有用!
一款自定义的控件,通过操作txt,html格式的文件达到repeater控件的效果,在CSS使用方面比repeater控件更易于操作,输出到页面后完全是html的标签,如果想在输出过程中加入服务器控件的话,改案例还无法达到要求,...
在ASP.NET中使用js时,js获取DOM元素时,经常获取不到,这是因为获取的方法有误,现在介绍一方法,解决如何使用js获取ASP.NET控件在浏览器端生成html标签对应的id 1.获取服务器端控件在浏览器端生成的标签的id,即...
JavaScript(DOM)鼠标移动评分控件,使用onmousemove事件实现