Vue框架下引入ActiveX控件的問題解決
最近參與了山東某一公司的呼叫中心系統(tǒng)的開發(fā)項(xiàng)目,我負(fù)責(zé)的模塊是在公司已有的前端Vue框架下集成他們的軟電話條功能。從開始到結(jié)束所遇到的幾個(gè)問題如下:
1.如何將ActiveX控件引入Vue,并且在頁(yè)面上成功渲染;
2.如何調(diào)用ActiveX已提供的方法;
3.如何監(jiān)聽ActiveX的動(dòng)作;
(注:以上問題在html的文件里不存在)
我們先來看下第一個(gè)問題:如何將ActiveX控件引入Vue,并且在頁(yè)面上成功渲染。如何將ActiveX控件渲染到頁(yè)面上。根據(jù)客戶開發(fā)人員提供的demo,`<object id="" classid=""></object>`拷貝到vue文件中,如圖所示

yarn run dev,運(yùn)行成功,但是頁(yè)面空出很大一塊空白區(qū)域,很顯然,沒有渲染成功。經(jīng)過查詢,ActiveX控件只支持在IE瀏覽器下使用(有點(diǎn)坑)
這算是解決了第一個(gè)問題,同樣,小伙伴可以通過動(dòng)態(tài)生成的方式渲染到頁(yè)面上,代碼如下:
let obj = document.createElement('object')
obj.setAttribute('id', 'activex')
obj.setAttribute('classid', 'clsid:{控件id}')
obj.setAttribute('width', 1500)
obj.setAttribute('height', 100)
var _obj = document.getElementById("要渲染的節(jié)點(diǎn)");
_obj.appendChild(obj)
接下來我們來看第二個(gè)問題:如何調(diào)用ActiveX已提供的方法。
渲染是可以了,但是卻無法調(diào)用控件提供的方法。根據(jù)demo:`softphonecontrol.MakeCall(paramsItem)`,無法執(zhí)行,后來又采取嵌入iframe方式(還記得剛剛說的嗎,這個(gè)控件在單純的html頁(yè)面沒有任何問題,當(dāng)然前提是IE瀏覽器)。最終找到原因,IE的瀏覽器需要做下設(shè)置設(shè)置:設(shè)置-Internet選項(xiàng)-安全/自定義級(jí)別-Active控件和插件-對(duì)未標(biāo)記為可安全執(zhí)行腳本的ActiveX控件初始化并執(zhí)行腳本,選擇"啟用"或者"提示")
最后一個(gè)問題啦:如何監(jiān)聽ActiveX的動(dòng)作。
根據(jù)demo:
<script for= "softphonecontrol" event= "OnLogRingUp(param1,param2)" language= "javascript">
alert("param1:"+param1+" "+"param2:"+param2);
</script>
再次提醒一下,這種寫法也只有IE支持,谷歌支持一些簡(jiǎn)單的window.reload、onclick之類的方法,<script></script>中間的alert就是監(jiān)聽后續(xù)需要做的事情。我將這段代碼直接拷貝到vue文件里:

哈哈,成功編譯,但是無法監(jiān)聽到。換個(gè)思路,動(dòng)態(tài)渲染到根節(jié)點(diǎn)呢,像上面提到的:
initRingUpSript:function(){
var ring = document.createElement("script");
ring.setAttribute("for","softphonecontrol");
ring.event="OnLogRingUp(Call_ID,CORP_CODE)";
ring.appendChild(document.createTextNode("phoneListener.ringUp(Call_ID,CORP_CODE)"))
document.body.appendChild(ring)
},
值得注意的是:此方法會(huì)將<script>function</script>渲染到頁(yè)面上,但是想執(zhí)行Vue的methods的方法的話,還需要在mounted里加上一句代碼: window.phoneListener = this;
這段代碼的作用是將Vue的this所指向賦值給全局的變量phoneListener,這個(gè)變量,可隨意。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Vue3+TypeScript的全局對(duì)象的注入和使用詳解
這篇文章主要介紹了基于Vue3+TypeScript的全局對(duì)象的注入和使用,本篇隨筆主要介紹一下基于Vue3+TypeScript的全局對(duì)象的注入和使用,需要的朋友可以參考下2022-09-09
Vue?ElementUI?table實(shí)現(xiàn)表格斜線分隔線
這篇文章主要為大家詳細(xì)介紹了Vue?ElementUI?table實(shí)現(xiàn)表格斜線分隔線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放詳細(xì)圖文教程
m3u8是一種常用的視頻流媒體格式,通常用于在Web上播放視頻,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
vue相同路由跳轉(zhuǎn)強(qiáng)制刷新該路由組件操作
這篇文章主要介紹了vue相同路由跳轉(zhuǎn)強(qiáng)制刷新該路由組件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
使用Vue+ElementUI動(dòng)態(tài)生成面包屑導(dǎo)航教程
Vue和ElementUI都是非常流行的前端開發(fā)框架,它們可以讓我們更加便捷地開發(fā)前端應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于使用Vue+ElementUI動(dòng)態(tài)生成面包屑導(dǎo)航的相關(guān)資料,需要的朋友可以參考下2023-05-05
vue打包部署到springboot的實(shí)現(xiàn)示例
項(xiàng)目開發(fā)中,一般我們都會(huì)使用SpringBoot+Vue進(jìn)行前后端開發(fā),本文主要介紹了vue打包部署到springboot的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07

