国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue與原生app的對(duì)接交互的方法(混合開發(fā))

2019-11-19 12:27:14
字體:
供稿:網(wǎng)友

小伙伴們?cè)谟胿ue開發(fā)h5項(xiàng)目特別是移動(dòng)端的項(xiàng)目,很多都是打包后掛載在原生APP上的,那就少不了與原生交互了,我最近就是在坐這個(gè),踩了一些坑,拿出來給大家分享下。

0.通過url傳輸數(shù)據(jù):(一般是在入口頁面?zhèn)飨耡pp的用戶信息進(jìn)來供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é)果)

思路就是萬物通過window 進(jìn)行交互

// 將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對(duì)象      },      subscanQRCallBack(result){        // alert('掃碼結(jié)果6466:'+result);        this.scanPost(result)      },}

由交互引發(fā)的對(duì)vue生命周期的思考

開發(fā)時(shí)遇到一個(gè)經(jīng)典問題,需要在頁面剛載入時(shí)與app交互判斷是否顯示一個(gè)彈窗。看似很簡(jiǎn)單,進(jìn)入頁面調(diào)一個(gè)交互方法即可,但這個(gè)需求的解決經(jīng)歷了幾個(gè)步驟:

1、created

因?yàn)閏reated時(shí),實(shí)例就創(chuàng)建完成了,我開始的選擇是在此生命周期掛載方法并調(diào)用交互,結(jié)果:頁面閃退,猜測(cè):實(shí)例雖有,但模板未編譯掛載,app調(diào)用方法失敗導(dǎo)致閃退

2、mounted

第二次將掛載和調(diào)用寫在了mounted內(nèi),結(jié)果:頁面閃退,猜測(cè)(誤):掛載和調(diào)用靠的太近,可能方法未掛載完就直接調(diào)用,導(dǎo)致閃退

3、created+mounted

created內(nèi)掛載方法,mounted內(nèi)調(diào)用交互,結(jié)果:我的ios12無異常,幾乎以為成功時(shí),ios10還是發(fā)生了閃退,猜測(cè)ios12的webview對(duì)此問題進(jìn)行了優(yōu)化,考慮兼容性,方案不可行。

4、延時(shí)

猜測(cè)是window沒有加載完便調(diào)用了window下的方法,導(dǎo)致閃退,對(duì)交互方法加了1s延時(shí),成功!但體驗(yàn)一般,因?yàn)橛残缘亩〞r(shí)容易引發(fā)許多不可控的問題,而且彈窗延時(shí)的存在導(dǎo)致用戶體驗(yàn)低下。

5、window.onload

onload 事件會(huì)在頁面或圖像加載完成后立即發(fā)生。mounted鉤子里添加代碼window.onload=function(){//調(diào)用交互},在window加載完成以后觸發(fā)交互,而且此時(shí)間節(jié)點(diǎn)在vue的生命周期是不存在的,也是在mounted、created鉤子后發(fā)生的,這個(gè)原生的方法還是很棒的,完美解決~!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柳州市| 天长市| 垦利县| 青冈县| 涿州市| 耿马| 苏州市| 益阳市| 浪卡子县| 邵东县| 揭东县| 简阳市| 谢通门县| 南岸区| 宝坻区| 平远县| 壶关县| 仁布县| 苍山县| 白沙| 广饶县| 大姚县| 盐源县| 西城区| 绵竹市| 法库县| 镇江市| 宜川县| 河曲县| 吴旗县| 溆浦县| 承德市| 昌图县| 乌恰县| 化州市| 凤城市| 峡江县| 广东省| 湛江市| 鹤庆县| 滦平县|