vue與原生app的對(duì)接交互的方法(混合開(kāi)發(fā))
小伙伴們?cè)谟胿ue開(kāi)發(fā)h5項(xiàng)目特別是移動(dòng)端的項(xiàng)目,很多都是打包后掛載在原生APP上的,那就少不了與原生交互了,我最近就是在坐這個(gè),踩了一些坑,拿出來(lái)給大家分享下。
0.通過(guò)url傳輸數(shù)據(jù):(一般是在入口頁(yè)面?zhèn)飨耡pp的用戶信息進(jìn)來(lái)供vue h5使用)
methods: { // 接收url后的數(shù)據(jù) urltext() { let loc = location.href; 6 let n1 = loc.length;//地址的總長(zhǎng)度 let n2 = loc.indexOf("=");//取得=號(hào)的位置 let outToken = loc.substr(n2 + 1, n1 - n2);//從=號(hào)后面的內(nèi)容 console.log(loc,n1,n2,outToken) this.outTokenPost(outToken) //傳到處理函數(shù) }, }
1.原生APP提供一個(gè)接口對(duì)象的引用(例如一個(gè)掃碼的接口,可能還有回調(diào)函數(shù)以獲得掃碼結(jié)果)
思路就是萬(wàn)物通過(guò)window 進(jìn)行交互
// 將vue組件的要回調(diào)的函數(shù)暴露出去 mounted:function(){ // 將subscanQRCallBack方法綁定到window下面,提供給外部調(diào)用 window['scanQRCallBack'] = (result) => { this.subscanQRCallBack(result) } }, methods:{ scan(){ // alert('開(kāi)始掃碼了') window.client.startScanQR('OS與js交互',scanQRCallBack) // 通過(guò)window調(diào)用app提供的client對(duì)象 }, subscanQRCallBack(result){ // alert('掃碼結(jié)果6466:'+result); this.scanPost(result) }, }
由交互引發(fā)的對(duì)vue生命周期的思考
開(kāi)發(fā)時(shí)遇到一個(gè)經(jīng)典問(wèn)題,需要在頁(yè)面剛載入時(shí)與app交互判斷是否顯示一個(gè)彈窗??此坪芎?jiǎn)單,進(jìn)入頁(yè)面調(diào)一個(gè)交互方法即可,但這個(gè)需求的解決經(jīng)歷了幾個(gè)步驟:
1、created
因?yàn)閏reated時(shí),實(shí)例就創(chuàng)建完成了,我開(kāi)始的選擇是在此生命周期掛載方法并調(diào)用交互,結(jié)果:頁(yè)面閃退,猜測(cè):實(shí)例雖有,但模板未編譯掛載,app調(diào)用方法失敗導(dǎo)致閃退
2、mounted
第二次將掛載和調(diào)用寫在了mounted內(nèi),結(jié)果:頁(yè)面閃退,猜測(cè)(誤):掛載和調(diào)用靠的太近,可能方法未掛載完就直接調(diào)用,導(dǎo)致閃退
3、created+mounted
created內(nèi)掛載方法,mounted內(nèi)調(diào)用交互,結(jié)果:我的ios12無(wú)異常,幾乎以為成功時(shí),ios10還是發(fā)生了閃退,猜測(cè)ios12的webview對(duì)此問(wèn)題進(jìn)行了優(yōu)化,考慮兼容性,方案不可行。
4、延時(shí)
猜測(cè)是window沒(méi)有加載完便調(diào)用了window下的方法,導(dǎo)致閃退,對(duì)交互方法加了1s延時(shí),成功!但體驗(yàn)一般,因?yàn)橛残缘亩〞r(shí)容易引發(fā)許多不可控的問(wèn)題,而且彈窗延時(shí)的存在導(dǎo)致用戶體驗(yàn)低下。
5、window.onload
onload 事件會(huì)在頁(yè)面或圖像加載完成后立即發(fā)生。mounted鉤子里添加代碼window.onload=function(){//調(diào)用交互},在window加載完成以后觸發(fā)交互,而且此時(shí)間節(jié)點(diǎn)在vue的生命周期是不存在的,也是在mounted、created鉤子后發(fā)生的,這個(gè)原生的方法還是很棒的,完美解決~!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決iview table組件里的 固定列 表格不自適應(yīng)的問(wèn)題
這篇文章主要介紹了解決iview table組件里的 固定列 表格不自適應(yīng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11vue 實(shí)現(xiàn)網(wǎng)頁(yè)截圖功能詳解
這篇文章主要介紹了通過(guò)vue實(shí)現(xiàn)網(wǎng)頁(yè)截圖的功能,有興趣的童鞋可以了解一下2021-11-11vue中響應(yīng)式布局如何將字體大小改成自適應(yīng)
這篇文章主要介紹了vue中響應(yīng)式布局如何將字體大小改成自適應(yīng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09詳解基于Vue的支持?jǐn)?shù)據(jù)雙向綁定的select組件
這篇文章主要介紹了詳解基于Vue的支持?jǐn)?shù)據(jù)雙向綁定的select組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Vue傳遞參數(shù)不在URL路徑拼接顯示問(wèn)題
這篇文章主要介紹了Vue傳遞參數(shù)不在URL路徑拼接顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03基于Vue2實(shí)現(xiàn)簡(jiǎn)易的省市區(qū)縣三級(jí)聯(lián)動(dòng)組件效果
這是一個(gè)基于Vue2的簡(jiǎn)易省市區(qū)縣三級(jí)聯(lián)動(dòng)組件,可以控制只顯示省級(jí)或只顯示省市兩級(jí),可設(shè)置默認(rèn)值等。提供原始省市縣代碼和名稱數(shù)據(jù),適用于各種有關(guān)城市區(qū)縣的應(yīng)用。需要的朋友可以參考下2018-11-11