jsbrige在前端的使用

1.使用原因

在项目开发中因为某个模块业务不稳定,为了不经常让用户更新APP,所以决定在项目中使用H5页面嵌入到手机app中。本来开始只是简单调用手机端来获取登录信息就可以,后续网络请求由H5页面实现,但是由于安全问题,需要所有请求后台的接口由APP完成,这就伴随着可能需要一个请求,手机端开一个请求的方法,此种定义不够灵活,而且有可能后面修改业务,也需要更新app,这就失去了不更新的意义。所以应用成熟框架jsbrige,应用这个框架后,只需要定义几个简单的方法就可以了,比如请求后台俩端约定方法名称为nativeHttp,其余参数及可以以JSON的形式经行通讯。顺便说一下,我前端的框架为VUE。

2.前端封装通讯部分

为了项目中方便使用,我将调用方法进行方法,新建文件为JSbridge.js,下面是使用的方法

let isAndroid = navigator.userAgent.indexOf(‘Android’) > -1 || navigator.userAgent.indexOf(‘Adr’) > -1;
 let isiOS = !!navigator.userAgent.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); 
1.//这是必须要写的,用来创建一些设置
2.function setupWebViewJavascriptBridge(callback) {
3.  //Android使用
4.  if (isAndroid) {
5.    if (window.WebViewJavascriptBridge) {
6.      callback(WebViewJavascriptBridge)
7.    } else {
8.      document.addEventListener(
9.        'WebViewJavascriptBridgeReady',
10.        function () {
11.          callback(WebViewJavascriptBridge)
12.        },
13.        false
14.      );
15.    }
16.    sessionStorage.phoneType = 'android'
17.  }
18.
19.  //iOS使用
20.  if (isiOS) {
21.    if (window.WebViewJavascriptBridge) {
22.      return callback(WebViewJavascriptBridge);
23.    }
24.    if (window.WVJBCallbacks) {
25.      return window.WVJBCallbacks.push(callback);
26.    }
27.    window.WVJBCallbacks = [callback];
28.    var WVJBIframe = document.createElement('iframe');
29.    WVJBIframe.style.display = 'none';
30.    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
31.    document.documentElement.appendChild(WVJBIframe);
32.    setTimeout(function () {
33.      document.documentElement.removeChild(WVJBIframe)
34.    }, 0);
35.    sessionStorage.phoneType = 'ios'
36.  }
37.}
38.//注册回调函数,第一次连接时调用 初始化函数(android需要初始化,ios不用)
39.setupWebViewJavascriptBridge(function (bridge) {
40.  if (isAndroid) {
41.    //初始化
42.    bridge.init(function (message, responseCallback) {
43.      var data = {
44.        'Javascript Responds': 'Wee!'
45.      };
46.      responseCallback(data);
47.    })
48.  }
49.})
50.
51.export default {
52.  // js调APP方法 (参数分别为:app提供的方法名  传给app的数据  回调)
53.  callHandler(name, data, callback) {
54.    setupWebViewJavascriptBridge(function (bridge) {
55.      bridge.callHandler(name, data, callback)
56.    })
57.  },
58.  // APP调js方法 (参数分别为:js提供的方法名  回调)
59.  registerHandler(name, callback) {
60.    setupWebViewJavascriptBridge(function (bridge) {
61.      bridge.registerHandler(name, function (data, responseCallback) {
62.        callback(data, responseCallback)
63.      })
64.    })
65.  }
66.}

在其他地方使用时是需要将上面JS映入即可。以我的项目使用为例,我将方法挂载到VUE原型中,方便使用。先新建install.js 代码如下

1.import bridge from './JSbridge.js'
2.const install = function (Vue) {
3.  Vue.prototype.$bridge = bridge
4.}
5.
6.export default install

然后在main.js中使用

1.import install from '@/commons/install'
2.Vue.use(install) //原型挂载工具

在具体的页面使用

1.this.$bridge.callHandler('与APP约定的方法名')

因为涉及到本地联调,我建议大家可以对http文件进行分装,如果开发环境用AXIOS,打包后用JSBrige,下面是我对get请求的封装

1.export default {
2.  get: function (url, query) {
3.    if(process.env.NODE_ENV === 'development'){
4.      return myAxios.get(url, {params: query})
5.    }else{
6.      return http(url, 'get', query)
7.    }
8.  }
9.}

最后希望此篇文章对其他人有所帮助,希望有什么问题大家给予指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值