JSBridge

hybrid存在的意义

1. 可以快速迭代开发
2. 体验流畅
3. 减少开发成本,双端共用一套代码
复制代码

webview

webview是app的一个组件,用来加载h5页面,即一个小型的浏览器内核

JS和客户端通信的基本形式

JS访问客户端能力,传递参数和回调函数
客户端通过回调函数返回内容
复制代码

手写一个JsBridege

var jwl
!function(e, n) {
    n(e)
}(window, function(e) {
// 不用理解都是调用开源的WebViewJavascriptBridge
function setupWebViewJavascriptBridge(callback) {
    if (e.WebViewJavascriptBridge) {
      return callback(e.WebViewJavascriptBridge);
    }
    if (e.WVJBCallbacks) {
      return e.WVJBCallbacks.push(callback);
    }
    e.WVJBCallbacks = [callback];

    var iframe = doc.createElement('iframe');
    iframe.style.display = 'none';
    iframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
    doc.documentElement.appendChild(iframe);
    setTimeout(function() {
      doc.documentElement.removeChild(iframe)
    }, 0)
  }
  // 不用理解都是调用开源的WebViewJavascriptBridge
  function invoke(fun, params, cb) {
    if (!params) params = {}
    setupWebViewJavascriptBridge(function(bridge) {
      bridge.callHandler(fun, params, function(res) {
        cb && cb(res)
      })
    })
  }
  
  var doc = e.document,
    ua = navigator.userAgent.toLowerCase(),
    isAndroid = -1 != ua.indexOf("android"),
    isIOS = -1 != ua.indexOf("iphone") || -1 != ua.indexOf("ipad"),
    apiList = {
        isAndroid,
        isIOS,
        // 显示右上角菜单
        showOptionMenu: function(e) {
          invoke('showOptionMenu', {
            menuList: e.menuList
          })
        },
    }
  return apiList    
})
复制代码

JS调用

// 显示app菜单
jwl.showOptionMenu({
  menuList: [
    'menuItem:share:appMessage',
    'menuItem:share:timeline',
    'menuItem:refresh'
  ]
})
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值