美文网首页大前端
H5页面与原生交互-JsBridge

H5页面与原生交互-JsBridge

作者: 天問_专注于大前端技术 | 来源:发表于2021-09-28 13:47 被阅读0次

在这个流量为王移动互联的时代,大部分互联网公司为了加快项目迭代开发,H5在移动端开发的比重逐步增加,webview也越来越吃香。
因此,开发过程中必定涉及H5页面与原生交互,自然而然就引出了JsBridge

JsBridge

前言

原生开发一般分为 Android 和 IOS,所以H5端为了兼容开发,一般使用封装好的插件,去统一调用原生端提供的jsbridge方法。
推荐插件:h5-jsbridge

安装

npm i -S h5-jsbridge

使用

import JsBridge from 'h5-jsbridge'

/**
 * 函数描述:js注册方法给app调用
 *
 * jsBridge.registerHandler(name, callback(data, appCallback))
 * @param {String} name 方法名
 * @param {Function} callback 回调函数
 * @param {Any} callback.data app返回的数据
 * @param {Function} callback.appCallback app返回的回调
 * @return
 */
JsBridge.registerHandler('funName', function (data, appCallback) {
  console.log(data)
}) 

/**
 * 函数描述:js调用app方法
 *
 * JsBridge.callHandler(name, params, callback)
 * @param {String} name 方法名
 * @param {Object} params 参数
 * @param {Function} callback 回调函数
 * @return
 */
JsBridge.callHandler('funName', { event: 'click' }, function (data) {
  console.log(data)
})

封装

// client.js
import JSBridge from 'h5-jsbridge';

export default {
  // JS 注册方法,原生端调用
  registerHandler (params, cb) {
    try {
      JSBridge.registerHandler(
        params.funName,
        (data) => {
          cb && cb(data);
        },
      );
    } catch (e) {
      console.log(`Params:${JSON.stringify(params)} \nError:${e}`);
    }
  },
  // JS 调用 原生端 API
  callHandler (params, cb) {
    try {
      JSBridge.callHandler(
        params.funName,
        params.data,
        (data) => {
          cb && cb(data);
        },
      );
    } catch (e) {
      console.log(`Params:${JSON.stringify(params)} \nError:${e}`);
    }
  },
}

页面调用

import Client from './client.js';

/*
* eg: 
* 关闭webview
* */

Client.callHandler({
  funName: 'H5ToNative',
  data: { type: 'CloseView', params: { type: 'close' } },
})

提示: 其中 funNamedata 都是由原生端定义的。

参考文档:


欢迎访问:个人博客地址

相关文章

网友评论

    本文标题:H5页面与原生交互-JsBridge

    本文链接:https://www.haomeiwen.com/subject/agtrnltx.html