首先获取当前环境是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. [译] 2017 年比较 Angular、React、Vue 三剑客

    原文地址:Angular vs. React vs. Vue: A 2017 comparison 原文作者:Jens Neuhaus 译文出自:掘金翻译计划 本文永久链接:github.com/xi ...

  2. HDU-1848-Fibonacci again and again(SG函数,博弈)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意: 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样 ...

  3. 开发(三)ESP32 硬件配置

    https://github.com/espressif/arduino-esp32

  4. CT107D电路解析

    1.译码器: 其中,A.B.C为输入端, 对应关系如下: CBA  十进制    输出(低电平) 000      0           Y0 001      1           Y1 010 ...

  5. 实验1c语言开发环境使用和数据类型,运算符和表达式

    /*this is first c program*/ # include<stdio.h> int main() { printf("Hello Mars!"); ; ...

  6. fiddler实现B/S端、APP抓包分析遇到的各种疑问

    阅读本文前您需要先下载fiddler并成功安装,并且要有一丢丢测试和接口基础或者在学习fidder时遇到了问题,或许本文可以帮助到你 一.B/S端抓包 Fiddler设置 1. 官网下载fiddler ...

  7. eureka中显示有服务但是通过ribbon调用显示No instances available for service-hello的问题

    一,问题 采取eureka集群.客户端通过Ribbon调用服务,Ribbon端报下列异常 ? 1 2 3 4 5 6 7 java.net.UnknownHostException: SERVICE- ...

  8. Redis简介及其安装

    1.Redis NoSQL (Not noly SQL)不仅仅是SQL 属于非关系型数据库:Redis就属于非关系型数据库 传统的Mysql ,oracle ,sql server 等 都是关系型数据 ...

  9. leetcode 85. 最大矩形

    题目描述: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 思路分析: 这题是之前那道最大正方形的进阶,同样是利用dp来求解.通过逐行去计算最大矩形,即优化的 ...

  10. vue-cli安装webpack项目及初始配置

    这个下载包是自己基于 webpack 搞的,可以看看https://github.com/chichengyu/webpack vue-cli安装 输入 npm install vue-cli -g ...