目录

一、概念了解:

webview – 承载和渲染网页的容器

JSBridge – 封装(了一系列js与native互通数据)的js方法

二、简易流程图:

三、详解流程:

第一步: 设计出一个Native与JS交互的全局桥对象

 第二步: JS调用Native功能实现-callHandler 内部实现

第三步: Native监听api调用,捕获这个url

第四步: Native分析url-api名、回调和参数的格式

第五步: Native调用JS功能实现

第六步: H5中api方法的注册 – H5页面中注册供原生调用的API 

四、完整流程图


方式采用native + h5

一句话总结:App 安装后都会在手机注册一个 schema比如淘宝taobal://,native 会有一个进程远程监控 webview发出的所有 schema://请求然后分发到各 api(即协议名称),native 处理时会用到传入的 param参数处理结束后再调用webview window 对象中的 callback

Js 调用 native:app 实现webview URL 的观察者模式h5通过改变 url哈希值,app解析哈希值的变化去执行相应操作

Native 与 h5通信:将 js 对象绑定webviewwindow 对象上,app 通过原生方法调用 window 中的 js 方法

一、概念了解:

Url schema

常用声明调用页面间的跳转

App 安装后都会在手机注册一个 schema ,比如淘宝taobal://

webview承载渲染网页容器

native也可以webview进行定制修改扩展js执行环境的宿主对象,拦截webview发起的请求控制缓存功能通过这些能力,能实现jsnative之前信息互通

JSBridge – 封装(了一系列jsnative互通数据)的js方法

常见交互如下
* native重写弹窗行为,如alertpromtconfirm
* URL schema

二、简易流程图

三、详解流程

一步: 设计一个Native与JS交互全局桥对象

window.JSBridge  = JSBridge

    该对象中包含三个方法:
    registerHandler(String handlerName, Function handler):供H5调用用来注册natvie可以调用的js方法然后保存本地变量messageHandlers中。

    callHandler( String handlerName, JSON data, Function callback):供H5调用,h5调用native 原生api,调用后用url schema触发然后callbackid放到本地变量responseCallbacks中。

    _handleMessageFromNative( JSON ):供native调用,native调用h5的方法,或者通知h5执行回调,(h5调用原生方法时 将回调函数作为参数传递,也就是responseCallbacks中的回调函数


 

 第二步: JS调用Native功能实现-callHandler 内部实现

    1. 使用判断h5调用该方法的时候没有回调函数,如果有,则生成一个回调函数id,并将id对应的回调函数添加进回调函数集合responseCallbacks中 

  if (cb_fun) {
              window[cb_value] = function (res) {
                    if (typeof res == 'string') res = JSON.parse(res);
                        console.log('['+tagname+'返回]', res)
                       cb_fun(res);
              }
        }

    2.将传入的方法名、数据等拼接一个url schema

    

var time = new Date().getTime();
var cb_key = (options.tagname == 'getSysDeviceInfo' || options.tagname == 'getLoginInfo') ? 'callBack' : 'callback';
var cb_value = (options.callbackname) ? options.callbackname : 'hybrid_' + time;
var schema = options.schema;
var tagname = options.tagname;
var cb_fun = options.callback;
var param = options.param;
var url = schema || 'kkhybrid';
url += '://' + tagname + '?t=' + time; //时间戳,防止url不起效
url += (cb_fun) ? '&' + cb_key + '=' + cb_value : '';

3.使用location.href跳转触发shcema

 window.location = url;

第三步: Native监听api调用,捕获这个url

第四步: Native分析url-api名、回调和参数的格式

        1.根据api找出对应原生方法, 并记录方法回调完成后的id
        2.对提取出来的参数进行转化
        3.原生用此api
        4.执行完成找到api对应的回调id合成一个json参数
        5.native通过JSBridge通知js页面回调

第五步: Native调用JS功能实现

 JSBridge._handleMessageFromNative(messageJSON);

六步: H5中api方法的注册 – H5页面中注册供原生调用的API
 

   //注册一个测试函数
    JSBridge.registerHandler('testH5Func',function(data,callback){
        alert('测试函数收到数据:'+JSON.stringify(data));
        callback&&callback('测试回传数据...');
    });

例:
kkmh.requestHybrid({
    tagName: ‘’,
    callback: function(res){}
})
    “`

四、完整流程图

原文地址:https://blog.csdn.net/weixin_38318244/article/details/123884246

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48578.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注