各种百度之后,在别的站看到一篇文章,介绍可以使用 WebViewJavascriptBridge与原生app进行通信;

在项目中尝试了一下,确实有效记录一下。

原文链接:

https://blog.csdn.net/szjSmiling/article/details/82773293

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:是有原生开发的同事定义的方法名

这样就完成了

04-05 00:16