vue與原生app的對接交互的方法(混合開發(fā))
小伙伴們在用vue開發(fā)h5項目特別是移動端的項目,很多都是打包后掛載在原生APP上的,那就少不了與原生交互了,我最近就是在坐這個,踩了一些坑,拿出來給大家分享下。
0.通過url傳輸數(shù)據(jù):(一般是在入口頁面?zhèn)飨耡pp的用戶信息進來供vue h5使用)
methods: {
// 接收url后的數(shù)據(jù)
urltext() {
let loc = location.href; 6 let n1 = loc.length;//地址的總長度
let n2 = loc.indexOf("=");//取得=號的位置
let outToken = loc.substr(n2 + 1, n1 - n2);//從=號后面的內(nèi)容
console.log(loc,n1,n2,outToken)
this.outTokenPost(outToken) //傳到處理函數(shù)
},
}
1.原生APP提供一個接口對象的引用(例如一個掃碼的接口,可能還有回調(diào)函數(shù)以獲得掃碼結(jié)果)
思路就是萬物通過window 進行交互
// 將vue組件的要回調(diào)的函數(shù)暴露出去
mounted:function(){
// 將subscanQRCallBack方法綁定到window下面,提供給外部調(diào)用
window['scanQRCallBack'] = (result) => {
this.subscanQRCallBack(result)
}
},
methods:{
scan(){
// alert('開始掃碼了')
window.client.startScanQR('OS與js交互',scanQRCallBack) // 通過window調(diào)用app提供的client對象
},
subscanQRCallBack(result){
// alert('掃碼結(jié)果6466:'+result);
this.scanPost(result)
},
}
由交互引發(fā)的對vue生命周期的思考
開發(fā)時遇到一個經(jīng)典問題,需要在頁面剛載入時與app交互判斷是否顯示一個彈窗??此坪芎唵?,進入頁面調(diào)一個交互方法即可,但這個需求的解決經(jīng)歷了幾個步驟:
1、created
因為created時,實例就創(chuàng)建完成了,我開始的選擇是在此生命周期掛載方法并調(diào)用交互,結(jié)果:頁面閃退,猜測:實例雖有,但模板未編譯掛載,app調(diào)用方法失敗導(dǎo)致閃退
2、mounted
第二次將掛載和調(diào)用寫在了mounted內(nèi),結(jié)果:頁面閃退,猜測(誤):掛載和調(diào)用靠的太近,可能方法未掛載完就直接調(diào)用,導(dǎo)致閃退
3、created+mounted
created內(nèi)掛載方法,mounted內(nèi)調(diào)用交互,結(jié)果:我的ios12無異常,幾乎以為成功時,ios10還是發(fā)生了閃退,猜測ios12的webview對此問題進行了優(yōu)化,考慮兼容性,方案不可行。
4、延時
猜測是window沒有加載完便調(diào)用了window下的方法,導(dǎo)致閃退,對交互方法加了1s延時,成功!但體驗一般,因為硬性的定時容易引發(fā)許多不可控的問題,而且彈窗延時的存在導(dǎo)致用戶體驗低下。
5、window.onload
onload 事件會在頁面或圖像加載完成后立即發(fā)生。mounted鉤子里添加代碼window.onload=function(){//調(diào)用交互},在window加載完成以后觸發(fā)交互,而且此時間節(jié)點在vue的生命周期是不存在的,也是在mounted、created鉤子后發(fā)生的,這個原生的方法還是很棒的,完美解決~!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3 ts組合式API異常onMounted is called when&
這篇文章主要為大家介紹了vue3 ts組合式API異常onMounted is called when there is no active component問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
Vue3系列之effect和ReactiveEffect?track?trigger源碼解析
這篇文章主要為大家介紹了Vue3系列之effect和ReactiveEffect?track?trigger源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
vue開發(fā)中如何在js文件里使用pinia和組件同步
在JavaScript文件中封裝涉及到使用Pinia的方法時,發(fā)現(xiàn)Pinia和組件內(nèi)容并不同步,二者的狀態(tài)是獨立的,解決辦法是,在新建對象的時候,將Pinia作為參數(shù)傳入,本文給大家介紹vue開發(fā)中如何在js文件里使用pinia和組件同步,感興趣的朋友一起看看吧2024-10-10

