[JavaScript]頁面動態添加Object元素及ActiveX控制項事件關聯

來源:互聯網
上載者:User

引言:

  一個網頁上如果有聲明一個Object元素,假設是某個證件閱讀機的ocx ActiveX控制項。頁面聲明如下:

<object id="TEST" classid="clsid:AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" 
width="0" height="0"></object>

  如果使用者沒有安裝這個控制項,那麼瀏覽器(本文僅就IE而言,下同)會自動搜尋;如果頁面有聲明codebase屬性,就會自動從此連結下載。遺憾的是,如果本地既沒安裝,下載未指定或下載失敗,那麼經過漫長等待才告訴使用者載入失敗。有時候還會導致整個頁面載入出現一片空白。使用者經過漫長等待,看到的頁面是空白,最後才提示沒有載入成功,這種使用者體驗是很差的。

  最近的一個項目就是這樣,項目用到幾個型號的證件閱讀機,採用調用ocx控制項,觸發閱讀機的刷卡識別事件。由於使用者不會將所有型號的閱讀機控制項都裝上(因為基本上固定使用某個型號的),所以,原來頁面上聲明了多個Object元素,如果有沒安裝的控制項(哪怕是一個),就會導致整個頁面載入嚴重緩慢,基本上需要1-2分鐘才能完全載入完畢。

解決方案

  遇到這個問題,首先想到的就是等整個頁面載入完畢後,根據使用者所選的閱讀機類型,再用JavaScript DOM動態建立(聲明)Object元素。這樣可以避免載入沒用到的控制項,避免頁面載入過慢。

  DOM建立、添加元素具體就不詳述了。但問題是,怎麼將元素和閱讀機的事件觸發關聯起來?原來的控制項調用部分使用vbscript寫的。經過網上查閱資料,發現vb的事件handler名是 控制項的id+事件名稱,但是在JavaScript顯然是行不通的。後來上網找到資料說,JavaScript下關聯事件是用這樣的形式:

<script type="text/javascript" for="控制項ID" event="事件處理函數名">
//事件handler
alert();
</script>

[1]中所寫“事件關聯函數要放在ActiveX控制項代碼的上面,否則接收不到事件通知。”,經測試不用如此也可以接收到事件,只要頁面有關聯事件的代碼即可(也有可能頁面沒有完全載入完畢就需要觸發ActiveX事件執行,這個時候最好是放在元素宣告的前面)。

留待解決的問題

也嘗試過用attachEvent(IE下, 非IE用其他函數)來將事件關聯到動態建立的元素上(根據[3]所言:事件參數無法取得,這個結論本人未驗證), 測試發現, 部分事件關聯成功, 但是閱讀機識別的事件卻沒有觸發, 其他事件都觸發了, 不知和解?


備忘:

ActiveX的classid在ActiveX控制項註冊後在註冊表可以尋找到,ActiveX的事件和屬性可以通過Visual Studio的物件瀏覽器看到。

參考文檔:

[1]ActiveX與JS互動, http://www.cnblogs.com/zdxster/archive/2011/01/27/1945879.html

[2]JavaScript調用Activex控制項的事件的實現方法,http://www.jb51.net/article/22996.htm

[3]如何取回ActiveX事件的傳回值,http://topic.csdn.net/t/20021018/10/1105929.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.