首先获取当前环境是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"}"
})

效果图如下:

最新文章

  1. yii2 renderPartial
  2. salesforce 零基础学习(十八)WorkFlow介绍及用法
  3. 使用List把一个长字符串分解成若干个短字符串
  4. jQuery--each遍历使用方法
  5. ruby脚本打印日志到rspec的报告文件中
  6. plsql 把数据导出成为 .sql文件,记住了
  7. cacti出现snmp error
  8. bzoj1012: [JSOI2008]最大数maxnumber [单调队列]
  9. 自学Python全栈开发第一次笔记
  10. SAP HUM 事务代码HUMO为整托做Scrap
  11. DataTable行分组,并sum求和
  12. s6 传输层
  13. Vue : Expected the Promise rejection reason to be an Error
  14. Tomcat控制台总是打印日志问题的解决办法
  15. Linux-GLIBCXX版本过低导致编译错误--version `GLIBCXX_3.4.20' not found
  16. linux_vim_emmet插件的安装配置
  17. Nginx---应用场景小结
  18. MySQL--3约束和修改数据表总结
  19. List在遍历中删除t元素
  20. 基于redis 3.x搭建集群环境

热门文章

  1. 关于defer.promise.then 异步的一个疑问 | 用柯里化做promise | 用递归做promise
  2. Gamification vs. Game-Based Learning
  3. 一种动态的样式语言--Less 之 命名空间
  4. netflix flamescope 方便的不同时间范围的火焰图查看工具
  5. 进阶blog整理
  6. [转]Reids配置文件redis.conf中文详解
  7. PKUSC2019滚粗记
  8. 《京东B2B业务架构演变》阅读笔记
  9. SpringBoot(十六):SpringBoot2.1.1集成fastjson,并使用fastjson替代默认的MappingJackson
  10. kaggle, gmail, 烟雨朦胧