首先获取当前环境是ios还是Android

 var u = navigator.userAgent;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

对ios和Android 不同环境下做处理

  modal.setupWebViewJavascriptBridge = function (callback) {
if (isAndroid) {
if (window.WebViewJavascriptBridge) {
callback(WebViewJavascriptBridge)
} else {
document.addEventListener('WebViewJavascriptBridgeReady', function (event) {
if (window.onWebViewJavascriptBridgeReady) window.onWebViewJavascriptBridgeReady(window.__bridge = WebViewJavascriptBridge);
callback(WebViewJavascriptBridge) }, false)
}
} if (isiOS) {
if (window.WebViewJavascriptBridge) {
return callback(WebViewJavascriptBridge);
}
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(callback);
}
window.WVJBCallbacks = [callback];
var WVJBIframe = document.createElement('iframe');
WVJBIframe.style.display = 'none';
WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
document.documentElement.appendChild(WVJBIframe);
setTimeout(function () {
document.documentElement.removeChild(WVJBIframe)
}, 0)
} }

交互处理

// js调用APP端的方法
modal.callhandler = function (name, data, callback) {
modal.setupWebViewJavascriptBridge(function (bridge) {
bridge.callHandler(name, data, callback)
})
}
// js端注册方法,给APP调用
modal.registerhandler = function (name, callback) {
modal.setupWebViewJavascriptBridge(function (bridge) {
bridge.registerHandler(name, function (data) {
callback(data)
})
})
}
modal.init = function (callback) {
modal.setupWebViewJavascriptBridge(function (bridge) {
bridge.init(function (data) {
callback(data)
})
})
}

需求:
H5调用APP的方法打开手机通讯录面板,然后APP调用H5注册的方法将用户选择的手机号码通过回调给到H5:

交互:APP和H5相互定义好方法名字,以及需要的参数,返回的方法,下面是交互文档,APP端注册的名字叫做:"useSystemAddressBookUI",H5注册的方法名字叫做:"getSingleContactData";

1、js调用Native

业务介绍

方法签名

方法参数

方法返回值

说明

调用系统通讯录面板 useSystemAddressBookUI

2、Native调用js

业务介绍

方法签名

方法参数

方法返回值

说明

获取通讯录单个数据 getSingleContactData

json字符串

格式如下:

"{name:"zhangsan",phone:"15117988888"}"

通讯录为空是json字符串为空""

交互框架使用:

WebViewJavascriptBridge

前端使用:

// 点击按钮打开通讯录面板useSystemAddressBookUI方法由APP端提供
$('.user-mobile-icon').on('click',function(){
bridgeSelf.callhandler('useSystemAddressBookUI','', function(data){ })
}) // H5注册getSingleContactData方法,APP调用,用户选择手机号后,会的到当前选择的手机号码
bridgeSelf.registerhandler('getSingleContactData', function(data){
alert(data); //"{name:"zhangsan",phone:"15117988888"}"
})

效果图如下:

bridge和原生交互的简单用法的更多相关文章

  1. h5 做app时和原生交互的小常识。

    距离上次随笔或许有半年了吧,最近在用hybrid模式开发移动app,所以就简单的说说用h5技术开发app时候,做原生交互的几个小常识: 一.拨打电话或者发送短信: <a href="t ...

  2. JS的简单用法

    JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...

  3. shell expect的简单用法【转】

    用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ######## ...

  4. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  5. (五)react-native开发系列之Android原生交互

    react-native可以做web与原生的交互,这是使用react-native开发项目的主要目的之一,也是主要优势,用rn而不用原生交互则毫无价值,这篇文章用来记录在项目中rn的原生交互使用过程. ...

  6. WebView的一些简单用法

    一直想写一个关于 WebView 控件的 一些简单运用,都没什么时间,这次也是挤出时间写的,里面的一些基础知识就等有时间再更新讲解一下,今天就先把项目出来做一些简单介绍,过多的内容可以看我的源码,都传 ...

  7. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  8. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

  9. 原生JS封装简单动画效果

    原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...

随机推荐

  1. CSS进阶之路

    下面主要引用http://www.cnblogs.com/wangfupeng1988/tag/css知多少/ CSS进阶笔记: 一.学习CSS的三个突破点 1.浏览器如何加载和解析CSS——CSS的 ...

  2. HTML5游戏引擎深度测评

    https://zhuanlan.zhihu.com/p/20768495 最近看到网上一篇文章,标题叫做<2016年 最火的 15 款 HTML5 游戏引擎>.目前针对HTML5游戏的解 ...

  3. vue.js不仅是一种模式,也是一种工程组织方式

    vue.js不仅是一种模式,也是一种工程组织方式

  4. matplotlib双y周实例e

    import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport pymysqlimport warningsimp ...

  5. 电商平台+keepalived高可用

    192.168.189.131 电商平台 192.168.189.129 MySQL主192.168.189.130 MySQL备192.168.189.181 VIP 配置MySQL为互为主从并结合 ...

  6. luoguP4173 残缺的字符串 FFT

    luoguP4173 残缺的字符串 FFT 链接 luogu 思路 和昨天做的题几乎一样. 匹配等价于(其实我更喜欢fft从0开始) \(\sum\limits_{i=0}^{m-1}(S[i+j]- ...

  7. nginx rewrite实战实例

    本部分内容为nginx生产环境中使用的场景示例. 域名跳转(域名重定向) 示例1(不带条件的): server{ listen ; server_name www.aminglinux.com; re ...

  8. 使用Lua脚本通过原子减防止超卖

    需求 双十二要搞一个一分钱门票抢购的活动. 分析 性能分析,抢购时会发生高并发,如果仅仅依靠Mysql数据库,有可能因为大量的请求频繁访问数据库造成服务器雪崩,所以考虑通过Redis减库存,最终的数据 ...

  9. glew的安装

    下载链接: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-win32.z ...

  10. Linux平台Boost 1.6.7的编译方法

    boost库下载地址:https://dl.bintray.com/boostorg/release/ 编译: 1. 获得bjam (1) # cd /usr/src/boost_1_67_0 (2) ...