学习笔记:DSBridge-跨端的原生与H5的通信框架

2021-06-03  本文已影响0人  双鱼子曰1987

一、什么是Javascript bridge?

在web和native之间进行交互,如传递数据,调用函数,而连接web与native需要一个桥梁,通常称为javascript bridge

目前github上开源最广的WebViewJavascriptBridgeJsBridgeDSBridge

二、DSBridge

DSBridge特性

三、DSBridge的内部原理

1、iOS原生端

1、JavaScript

核心原理
源码核心
var bridge = {
        // js调用native的方法入口
        call: function (method, args, cb) {
            arg = JSON.stringify(arg)
           
            if(window._dsbridge){
                ret=  _dsbridge.call(method, arg)
            }else if(window._dswk||navigator.userAgent.indexOf("_dsbridge")!=-1){
                //使用时Native会注册_dswk参数
                
                // 调用prompt函数,Native会拦截prompt事件,然后执行
                ret = prompt("_dsbridge=" + method, arg);
            }
 
            return  JSON.parse(ret||'{}').data
        },
        //Native调用的方法使用此方法注册
        register: function (name, fun, asyn) {
            //注册的方法会保存到_dsaf或_dsf中
            var q = asyn ? window._dsaf : window._dsf
            
            //object类型保存到_obs下,方法直接保存到_dsf(_dsaf)下
            if (typeof fun == "object") {
                q._obs[name] = fun;
            } else {
                q[name] = fun
            }
        }
};
//立即执行函数
!function () {
    //判断是否需要给window进行参数添加,如果没有添加会把ob内参数进行一次添加
    if (window._dsf) return;
    
    var ob = {
        _dsf: {//存储同步方法
            _obs: {}//存储同步方法相关object
        },

        _dsaf: {//存储异步方法
            _obs: {}//存储异步方法相关object
        },

        dscb: 0,//避免方法同名每次加1
        dsBridge: bridge, 

        _handleMessageFromNative: function (info) { //处理Native调用js方法,核心实现如下
            // 通过info.method 获取方法实现
           var f = this._dsf[info.method];

            // 通过info.data 获取入参,数组形式
            var arg = JSON.parse(info.data);

            // 使用apply函数,调用函数
            f.apply(ob, arg)
        } //end
    } // var ob end

}//func end

备注

WebViewJavascriptBridge

前端与客户端通信 -- DSbridge源码解读
DSBridge-IOS
DSBridge-Android

上一篇 下一篇

猜你喜欢

热点阅读