首先获取当前环境是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. Mac下用命令行获取苹果手机的UDID

    在终端输入命令行:system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Nu ...

  2. java.util. Arrays.sort(scores);

    import java.util.*; public class ArraySortScore { //完成 main 方法 public static void main(String[] args ...

  3. BlocksKit block从配角到主角—oc通往函数式编程之路--oc rx化?

    BlocksKit 对 oc语言的功能层.UI层进行了大量的适配,使得oc能够复合函数式编程的风格: 是oc语言的函数式编程风格改造: 将函数式风格的BlocksKit API解释为原生的功能调用: ...

  4. The Secret Life of Types in Swift

    At first glance, Swift looked different as a language compared to Objective-C because of the modern ...

  5. DSL的概念

    DSL:以极其高效的方式描述特定领域的对象.规则和运行方式的语言. 需要有特定的解释器与其配合. 高效简洁的领域语言,与通用语言相比能极大降级理解和使用难度,同时极大提高开发效率的语言. 能够描述特定 ...

  6. Linux 中 Buffer/Cache内存占用过高解决方法

    在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是kb,我的服务器是128G内存,所以数字显 ...

  7. 使用Google学术简单方法汇总

    1 Google学术打不开,简单方法汇总. 2   谷歌学术镜像 http://dir.scmor.com/google/ 3,https://xs.glgoo.net/ 4, https://sch ...

  8. go中的事件对象time.Duration

    const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Sec ...

  9. match 和 search 和 indexOf 查找及 正则表达式的 exec 和 test 用法

    function test(){ var name= "1.087"; var abc = "abd wor66k ne78xt"; var reg = /\d ...

  10. 信息学奥赛一本通 提高篇 序列第k个数 及 快速幂

    我是传送门 这个题首先是先判断是等差还是等比数列 等差的话非常简单: 前后两个数是等差的,举个栗子: 3 6 9 12 这几个数,(我感觉 1 2 3 4并说明不了什么) 每次都加3嘛,很容易看出,第 ...