以前跟客戶端聯調可能沒有注意到細節問題,此次開發又遇到聯調,統一整理下,而後本身也封裝一套基礎代碼
注意android如下狀況---安卓沒帶參數,h5端也須要不帶參數 ,安卓須要參數,這邊也須要攜帶參數 不然有bug
注意ios狀況下 就算ios不須要攜帶參數,也須要傳空
// 封裝一個bridge.js 文件 ,而後並把這個文件在main.js 掛載到vue原型上 import utils from '@extend/util/util.js' // utils.deviceType 是獲取設備類型的方法 export default { callhandler (name,callback,data) { let result = ''; if(utils.deviceType === 'Android'){ if(data){ // 這是android提早與安卓開發人員協商好 result = window.android[name](data); }else{ window.android[name](); } } if(utils.deviceType === 'IOS'){ result = window.webkit.messageHandlers[name].postMessage(data); } // 這裏考慮到可能有的api有返回值,因此返回了個result callback && callback(result) }, registerhandler (name, callback) { if(utils.deviceType === 'Android' || utils.deviceType === 'IOS'){ window[name] = res => { let data = ''; if(res){ data = JSON.parse(JSON.stringify(res)) } callback && callback(data) } } } }
// 只須要一句話調用便可 this.$bridge.callhandler('finish');
實際應用--在填寫完資料後通知客戶端vue
// 須要提早先註冊 this.$bridge.registerhandler('setUserInfo', () => { this.commit() // commit寫在本地的提交方法 })
實際應用--在填寫完資料後客戶端點擊右上角保存按鈕android
參考文章
WebViewJavascriptBridgeios