各种百度之后,在别的站看到一篇文章,介绍可以使用 WebViewJavascriptBridge与原生app进行通信;
在项目中尝试了一下,确实有效记录一下。
原文链接:
1,引入第三方WebViewJavascriptBridge的库
1 function setupWebViewJavascriptBridge(callback) { 2 if (window.WebViewJavascriptBridge) { 3 return callback(window.WebViewJavascriptBridge) 4 } 5 if (window.WVJBCallbacks) { 6 return window.WVJBCallbacks.push(callback) 7 } 8 window.WVJBCallbacks = [callback] 9 let WVJBIframe = document.createElement('iframe');10 WVJBIframe.style.display = 'none'11 WVJBIframe.src = 'https://__bridge_loaded__'12 document.documentElement.appendChild(WVJBIframe);13 setTimeout(() => {14 document.documentElement.removeChild(WVJBIframe)15 }, 0)16 }17 export default {18 callhandler(name, data, callback) {19 setupWebViewJavascriptBridge(function (bridge) {20 bridge.callHandler(name, data, callback)21 })22 },23 registerhandler(name, callback) {24 setupWebViewJavascriptBridge(function (bridge) {25 bridge.registerHandler(name, function (data, responseCallback) {26 callback(data, responseCallback)27 })28 })29 }30 }
新建一个js文件,把上面的代码复制粘贴就好了
2,在main.js中引入文件
import Bridge from './assets/js/bridge.js'Vue.prototype.$bridge = Bridge
3,调用方法
let ua = navigator.userAgent; let isAndroid = ua.indexOf('Android') > -1 || ua.indexOf('Adr') > -1; let isiOS = !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // console.log(isAndroid, '安卓') // console.log(isiOS, 'ios') if (isiOS) { this.$bridge.callhandler('popToStudyRootVC', (data) => { // 处理返回数据 console.log(data, '我走了这里') }) }
popToStudyRootVC:是有原生开发的同事定义的方法名
这样就完成了