FastHybridKit

FastHybridKit是什么

FastHybridKit定义了一套JS中间层,业务端代码能用统一的方式调用Native端的事件,同时在Native端利用类名的映射,和参数格式固定化,达到动态跳转任意原生界面的目的,实现轻量级的热更新。

示例

  • 获取Token

    • Api: getToken
    • 参数: 传入一个匿名函数,并拿到回调
    var $$ = function(id){
          return document.getElementById(id);
      }
      $$('getToken').addEventListener('click', function(e){
          gl.getToken(function(res){
              $$('getToken').innerHTML = res;
          })
      })
    
  • 友盟统计

    • Api: UMAnalytics
    • 参数: 事件ID, 事件描述
$$('UMAnalytics').addEventListener('click', function(e){
        gl.UMAnalytics('123', 'Page A')
    })
  • 对话框

    • Api: dialog
    • 参数: 内容,确认函数回调,取消函数回调
$$('dialog').addEventListener('click', function(e){
        gl.dialog('德玛西亚,永世长存', function(ok){
            gl.toast('Choice OK')
        }, function(cancle){
            gl.toast('Choice Cancle')
        })
    })
  • Toast

    • Api: toast
    • 参数: 内容
$$('toast').addEventListener('click', function(e){
        gl.toast('Hybrid Demo')
    })
  • 打开新的H5页面

    • Api: openH5
    • 参数: nav_hidden(是否隐藏), title(标题), url(链接)
    • 参数格式: 对象
$$('openH5').addEventListener('click', function(e){
        gl.openH5({nav_hidden:false, title:"MyBlog", url:"http://361teach.com"})
    })
  • 跳转原生

    • Api: open
    • 方式1: 直接调用 (只针对某一端)
    • 参数1: (某端)类名, 自己包装传参
    • 方式2: 根据注册的方法表调用 iOS 安卓都响应
    • 参数2: 类名,参数, (考虑到安卓、iOS 参数命名不同 ,jssdk 负责为各端包装参数)

示例1

// className 为 iOS 端的类名
$$('openNative').addEventListener('click', function(e){
        var className = $$('pageName').value;
        var args = $$('args').value;
        gl.open({n:className, v:{arg:args}})
    })

示例2

// match_detail 为 jssdk里注册的方法 实现双端响应
$$('openNative').addEventListener('click', function(e){
        gl.open({n:'match_detail', v:{sid:1}})
    })
  • 设置导航

    • Api: nav
    • 参数: nav_hidden(是否隐藏导航), title(标题), left(左Itmes),right(右items)
$$('nav').addEventListener('click', function(e){
        var className = $$('nav_pageName').value;
        var args = $$('nav_args').value;
        gl.nav({nav_hidden: false, title:'Hybrid', left:[], right:[{icon:'', func:'openNative:', vars:{n:className, v:{arg: args}}}]})
    })
  • 扩展Web存储

    • Api: webStorage
    • 参数: key, value
 $$('webStorage').addEventListener('click', function(e){
        var k = $$('keyInput').value
        var v = $$('valueInput').value
        gl.webStorage(k,v);
    })
  • 打开外部浏览器

    • Api: openBrowser
    • 参数: urL
 $$('openBrowser').addEventListener('click', function(e){
        gl.openBrowser('http://361teach.com')
    })

扩展

如果jssdk里的功能无法满足你的业务需求,可以自己进行扩展

  1. 扩展新的功能

    jssdkgl对象上添加新的属性,同时还需要在Native注册新的方法名

  2. 扩展新的模块名

    jssdk维护一个方法注册列表

    nativeClsDict: {
             match_detail: function (i) {
                 if (gl.platform.android) {
                     return ["your class name", {
                             sid: i.sid || "",
                             CurrentIndex: i.CurrentIndex || 0,
                             Tran: i.Tran || ""
                         }
                     ];
                 }
                 return ["your class name", {
                         id: i.sid,
                         linkType: i.CurrentIndex || 0,
                         currentIndex: 0
                     }
                 ];
             },
         }
    

    如果要跳转新的模块,在这个注册列表里定义新的模块名,并配置参数,同时更新H5引入的jssdk版本

如何使用FastHybridKit

Web 端

  1. 引入demo中提供的jssdk地址, 不建议这么做,无法动态扩展
    <script type="text/javascript" src="http://mianshizhijia.oss-cn-hangzhou.aliyuncs.com/FastHybridKit/jssdk.js"></script>
    
  2. jsdk下载下来,上传到自己公司服务器,或者打包在项目中,便于维护和扩展

iOS 端

iOS端只需将JSTool手动引入项目中,并依赖YYModel,和SDWebImage

安全控制

出于安全考虑,不建议用cdn的方式引入jssdk,容易被拦截从而获取得到token和和其它关键信息的方法,直接打包到项目中,又无法动态的更新,可以使用预下载的方式,使用md5校验,防止被篡改,同时采用分级管理,内部使用的等级较高,使用全部Api,暴露给外部(比如广告商)权限较低,不涉及隐私方法的调用.

项目源码

FastHybridKit

延伸阅读

深入解析WebViewJavascriptBridge

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355