日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript 操作 COM 控件

發(fā)布時(shí)間:2025/5/22 javascript 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript 操作 COM 控件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目標(biāo):用JavaScript 腳本代碼調(diào)用COM控件,實(shí)現(xiàn)基本功能操作:
1.定義及初始化COM控件;
2.調(diào)用COM接口;
3.注冊(cè)COM事件并實(shí)現(xiàn)事件調(diào)用。

1. 定義及初始化COM控件
???? 在HTML頁面定義一個(gè)object標(biāo)簽來加載COM控件:
1) classid:是COM控件的編號(hào),用來唯一識(shí)別一個(gè)COM控件;
2) id:是JavaScript調(diào)用COM控件時(shí)訪問的對(duì)象,它是全局對(duì)象,此處將全局對(duì)象命名為ocx;
3) codebase:是打包COM的cab包資源路徑。可以在后面加上#version=1,0,0,1來發(fā)布cab實(shí)現(xiàn)自動(dòng)更新下載。

?

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> [用戶還可以定義其它相關(guān)屬性]
復(fù)制代碼用瀏覽器(IE內(nèi)核)打開頁面后就可以加載COM控件。

2. 調(diào)用COM按口和屬性
2.1 調(diào)用方法
???? 在創(chuàng)建COM標(biāo)簽時(shí)定義了一個(gè)全局對(duì)象ocx。所以之后在JavaScript代碼中調(diào)用控件接口顯示非常容易,類似后Java中表態(tài)訪問的調(diào)用,如調(diào)用創(chuàng)建播放器方法:

COM接口:

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

LONG CreatePlayer(LONG flag,ULONG decTag, BSTR streamerName, LONG playerIndex)
復(fù)制代碼Javascript調(diào)用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

}
復(fù)制代碼CreatePlayer需要JavaScript傳遞4個(gè)參數(shù)進(jìn)去(這里只涉及×××和字符串類型),并返回一個(gè)數(shù)字類型的值作為判斷標(biāo)志。


2.2 調(diào)用屬性
調(diào)用屬性和方法一樣,只是不用再傳遞參數(shù)給COM,如獲取播放器畫面數(shù)量的屬性:

Js代碼 1.var screenNums = ocx.screenNum;?

var screenNums = ocx.screenNum;
復(fù)制代碼當(dāng)然,也可以設(shè)置屬性的值,如,設(shè)置播放器畫面數(shù)量:

Js代碼 1.ocx.screenNum = 4;?

ocx.screenNum = 4;
復(fù)制代碼3. 注冊(cè)COM事件并實(shí)現(xiàn)函數(shù)回調(diào)
???? 我們可以調(diào)用的COM的方法和屬性來實(shí)現(xiàn)對(duì)COM的訪問和設(shè)置。
???? 但這樣還不夠,因?yàn)槲覀儾荒芸偸侵鲃?dòng)去調(diào)用COM的方法或?qū)傩詠慝@取數(shù)據(jù)。比如要獲取COM當(dāng)前的狀態(tài)(狀態(tài)是不斷改變的)我們就要用譬如輪詢(如:window.setInterval())這樣的方式不斷去訪問接口,這樣既費(fèi)時(shí)又浪費(fèi)系統(tǒng)資源。
???? 所以,如果COM有一個(gè)通知事件,我們就可以將JavaScript函數(shù)注冊(cè)到COM事件中,當(dāng)COM執(zhí)行后調(diào)用該事件時(shí)就可以間接調(diào)用JavaScript函數(shù)來實(shí)現(xiàn)回調(diào)。這樣JavaScript就可以輕松的被動(dòng)接收數(shù)據(jù)。

???? 以下是播放器窗口焦點(diǎn)變化時(shí)通知JavaScript做出的相關(guān)響應(yīng)的一系列實(shí)現(xiàn)過程:
a) ActiveScreenChanged(LONG playerIndex):是COM中的通知事件,在注冊(cè)時(shí)不用帶參數(shù)。
b) regOcxActiveScreen():是JavaScript中的注冊(cè)事件;
c) listener_ActiveScreen(playerIndex):是JavaScript中的回調(diào)函數(shù),在注冊(cè)時(shí)不用帶參數(shù)。

1) 定義JavaScript注冊(cè)事件:

Js代碼 1.function regOcxActiveScreen() {??

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

3.if ($.browser.msie) {??

4.//IE內(nèi)核瀏覽器的注冊(cè)方式??

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

6.} else {??

7.//非IE內(nèi)核瀏覽器注冊(cè)方式??

8.//當(dāng)然這里其實(shí)沒有必要,因?yàn)橹挥蠭E內(nèi)核瀏覽器才能執(zhí)行此處討論的COM組件??

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

10.}??

11.}?

function regOcxActiveScreen() {

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

if ($.browser.msie) {

//IE內(nèi)核瀏覽器的注冊(cè)方式

focus.attachEvent("ActiveScreenChanged",listener_ActiveScreen);

} else {

//非IE內(nèi)核瀏覽器注冊(cè)方式

//當(dāng)然這里其實(shí)沒有必要,因?yàn)橹挥蠭E內(nèi)核瀏覽器才能執(zhí)行此處討論的COM組件

focus.addEventListener("ActiveScreenChanged",listener_ActiveScreen);

}

}
復(fù)制代碼[也可以直接使用:ocx.attachEvent("ActiveScreenChanged",listener_ActiveScreen);來注冊(cè)就可以了,因?yàn)橹耙呀?jīng)定義了ocx,此處只是再取一個(gè)別名。]

2) 定義JavaScript回調(diào)函數(shù):

Js代碼 1.function listener_ActiveScreen(playerIndex) {??

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

3.//TODO??

4.}?

function listener_ActiveScreen(playerIndex) {

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

//TODO

}
復(fù)制代碼還有一種調(diào)用方式是直接在頁面中通過script標(biāo)簽來實(shí)現(xiàn)的,如:

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>?
復(fù)制代碼這種方法個(gè)人不太喜歡,代碼結(jié)構(gòu)完整性比較差。

轉(zhuǎn)載于:https://blog.51cto.com/wws5201985/737004

總結(jié)

以上是生活随笔為你收集整理的JavaScript 操作 COM 控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。