日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JavaScript 操作 COM 控件

發布時間:2025/5/22 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript 操作 COM 控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標:用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 控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。