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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:27:40
字體:
來源:轉載
供稿:網友

小伙伴們在用vue開發h5項目特別是移動端的項目,很多都是打包后掛載在原生APP上的,那就少不了與原生交互了,我最近就是在坐這個,踩了一些坑,拿出來給大家分享下。

0.通過url傳輸數據:(一般是在入口頁面傳下app的用戶信息進來供vue h5使用)

methods: {      // 接收url后的數據      urltext() {        let loc = location.href;  6         let n1 = loc.length;//地址的總長度        let n2 = loc.indexOf("=");//取得=號的位置        let outToken = loc.substr(n2 + 1, n1 - n2);//從=號后面的內容        console.log(loc,n1,n2,outToken)        this.outTokenPost(outToken) //傳到處理函數      },}

1.原生APP提供一個接口對象的引用(例如一個掃碼的接口,可能還有回調函數以獲得掃碼結果)

思路就是萬物通過window 進行交互

// 將vue組件的要回調的函數暴露出去mounted:function(){              // 將subscanQRCallBack方法綁定到window下面,提供給外部調用        window['scanQRCallBack'] = (result) => {          this.subscanQRCallBack(result)        }       },methods:{      scan(){        // alert('開始掃碼了')        window.client.startScanQR('OS與js交互',scanQRCallBack)  // 通過window調用app提供的client對象      },      subscanQRCallBack(result){        // alert('掃碼結果6466:'+result);        this.scanPost(result)      },}

由交互引發的對vue生命周期的思考

開發時遇到一個經典問題,需要在頁面剛載入時與app交互判斷是否顯示一個彈窗。看似很簡單,進入頁面調一個交互方法即可,但這個需求的解決經歷了幾個步驟:

1、created

因為created時,實例就創建完成了,我開始的選擇是在此生命周期掛載方法并調用交互,結果:頁面閃退,猜測:實例雖有,但模板未編譯掛載,app調用方法失敗導致閃退

2、mounted

第二次將掛載和調用寫在了mounted內,結果:頁面閃退,猜測(誤):掛載和調用靠的太近,可能方法未掛載完就直接調用,導致閃退

3、created+mounted

created內掛載方法,mounted內調用交互,結果:我的ios12無異常,幾乎以為成功時,ios10還是發生了閃退,猜測ios12的webview對此問題進行了優化,考慮兼容性,方案不可行。

4、延時

猜測是window沒有加載完便調用了window下的方法,導致閃退,對交互方法加了1s延時,成功!但體驗一般,因為硬性的定時容易引發許多不可控的問題,而且彈窗延時的存在導致用戶體驗低下。

5、window.onload

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 封丘县| 绥中县| 廉江市| 丰原市| 平阴县| 滕州市| 西和县| 大洼县| 武城县| 云龙县| 哈密市| 金昌市| 凤翔县| 聂拉木县| 绍兴市| 芜湖县| 汾西县| 镇雄县| 汉中市| 明溪县| 梁河县| 汤原县| 红原县| 哈巴河县| 拉萨市| 密云县| 若尔盖县| 江油市| 加查县| 天门市| 元氏县| 洪洞县| 美姑县| 盐池县| 桃源县| 涞水县| 兰溪市| 安福县| 梅州市| 中西区| 进贤县|