需求:

  APP要用H5页面做展示,而且要获取到对应的商品ID,用户点击H5页面跳回APP原生页面。

方法:

  先要判断用户是ios还是android设备(这里只考虑ios跟android,因为它俩写法还是有点不一样,所以分开),然后禁止掉H5页面的跳转,获取点击区域的ID,传给APP。

ios:其中goDetail是ios他们要调用的方法,data就是ID值,type是类型 有其它参数的时候可以传给APP

 var u = navigator.userAgent; //获取用户设备
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 $("a").click(function(){
var href = $(this).attr("data-href");
if (isIOS && window.WebViewJavascriptBridge) { //ios app 设备才执行
$(this).attr("href","javascript:;");//禁止H5页面跳转
WebViewJavascriptBridge.callHandler('goDetail', {"data": href,'type':"1"}, function(){ });
return false; }
});

android:在安卓代码里面调用H5里面写的一个方法gotoAndroidApp(),然后他们获取goodsDetail参数的值,第一个为ID,第二个为type值,有其它参数的时候可以依次传多个

 // 安卓app才调用的方法
function gotoAndroidApp() {
$("a").click(function(){
$(this).attr("href","javascript:;");
var href = $(this).attr("data-href");
window.androidVik.goodsDetail(href,1);
return false;
});
}

完整的案例:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scale=no">
<title>对接app</title>
</head>
<body>
<div class="ios">
<a href="index.html" data-href="1">ios点击按钮</a>
</div>
<div class="android">
<a href="index.html" data-href="2">android点击按钮</a>
</div>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
var u = navigator.userAgent; //获取用户设备
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 $("a").click(function(){
var href = $(this).attr("data-href");
if (isIOS && window.WebViewJavascriptBridge) { //ios app 设备才执行
$(this).attr("href","javascript:;");//禁止H5页面跳转
WebViewJavascriptBridge.callHandler('goDetail', {"data": href,'type':"1"}, function(){ });
return false;
}
});
// 安卓app才调用的方法
function gotoAndroidApp() {
$("a").click(function(){
$(this).attr("href","javascript:;");
var href = $(this).attr("data-href");
window.androidVik.goodsDetail(href,1);
return false;
});
}
</script>
</body>
</html>

2017年11月06日:更新

 <script type="text/javascript">
$(function(){
// APP点击
var u = navigator.userAgent; //获取用户设备
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 if (isIOS) { //ios app 设备才执行 /*这段代码是固定的,必须要放到js中*/
function setupWebViewJavascriptBridge(callback) {
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);
} /*与OC交互的所有JS方法都要放在此处注册,才能调用通过JS调用OC或者让OC调用这里的JS*/
setupWebViewJavascriptBridge(function(bridge) { /*JS给ObjC提供公开的API,在ObjC端可以手动调用JS的这个API。接收ObjC传过来的参数,且可以回调ObjC*/
bridge.registerHandler('getUserInfos', function(e) {
gotoIosApp(e);
gotoRotate(e);
});
});
}
}); // 苹果app才调用的方法
function gotoIosApp(e){
$(".rotateList a").click(function(){
$(this).attr("href","javascript:;");//禁止H5页面跳转
var goodsId = $(this).attr("goods-id");
WebViewJavascriptBridge.callHandler('goodsDetail', {"code": '200',"data": goodsId}, function(){});
return false;
});
} function gotoRotate(e){
// 判断用户有没登录
var isTrue = {$is_login}; $(".rotateBtn").click(function(){
if (isTrue) {
$(this).bind("click");
WebViewJavascriptBridge.callHandler('clickButton', {"code": '200',"login":"1"}, function(){});
} else {
$(this).unbind("click");
WebViewJavascriptBridge.callHandler('clickButton', {"code": '200',"login":"0"}, function(){});
}
});
}
// 安卓app才调用的方法
function gotoAndroidRotate(e) { var isTrue = {$is_login}; $(".rotateBtn").click(function(){
if (isTrue) {
$(this).bind("click"); } else {
$(this).unbind("click");
window.androidVik.clickLuck(); }
});
$(".rotateList a").click(function(){
$(this).attr("href","javascript:;");//禁止H5页面跳转
var goodsId = $(this).attr("goods-id");
window.androidVik.goodsDetail(goodsId);
return false;
});
}
</script>

H5跟ios、android交互跟数据对接的更多相关文章

  1. js 与 ios Android交互

    一.android 交互 1.js调用webview 在android API Level 17及以上的版本中,就会出现js调用不了android的代码,这是版本兼容的问题,需要在调用的方法上面加一个 ...

  2. Fiddler抓取手机端(ios+android)APP接口数据(http+https)

    (1)android 环境要求: PC机和手机连接在同一网络下 工具下载地址: Fiddler网上可以下载,自行下载.注意:需要安装fiddlercertmaker(网上自行下载)进行认证 配置步骤: ...

  3. H5与安卓、IOS的交互,判断微信、移动设备、安卓、ios

    一.通过用户代理可以判断网页当前所在的环境 var browser={ versions:function(){ var u = navigator.userAgent, app = navigato ...

  4. Android 与H5之间的js交互

    之前项目做过一些Android和Html5之间js交互方面的东西,今天有时间就总结一下: 一.为什么要进行js交互: 为了方便原生开发和Html之间数据传递,在静态页面的情况下可以改变原生开发的页面: ...

  5. android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】

    android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...

  6. 移动端H5 判断IOS还是Android 平台

    1.方法 (function($) { var UA = window.navigator.userAgent; if(/Android|HTC/i.test(UA) || !!(window.nav ...

  7. H5移动端IOS/Android兼容性总结,持续更新中…

    H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进 ...

  8. Android平台Camera2数据如何对接RTMP推流到服务器

    1. Camera2架构 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用 ...

  9. iOS/Android 浏览器(h5)及微信中唤起本地APP

    在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: ...

随机推荐

  1. 华为敏捷/DevOps实践:产品经理如何开好迭代计划会议

    大家好,我是华为云DevCloud项目管理服务的产品经理恒少,作为布道师和产品经理,出差各地接触客户是常态,线下和华为云的客户交流.布道.技术沙龙. 但是线下交流,覆盖的用户总还是少数.我希望借助线上 ...

  2. POJ-3468-A Simple Problem with Integers(线段树 区间更新 区间和)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 139191 ...

  3. 二分答案 & 洛谷 P2678 跳石头

    首先让我们先学一下二分答案这个东西...   二分答案,肯定与二分有关,还与可能是答案的东西有关... 二分答案的准确定义: 二分答案是指在答案具有单调性的前提下,利用二分的思想枚举答案,将求解问题转 ...

  4. celery实现异步任务

    celery==3.1.25 rabbitmq开启服务 tasks.py代码如下: from celery import Celery broker = 'amqp://guest:guest@loc ...

  5. EasyUI学习笔记(二)—— Layout

    一.layout页面布局 EasyUI布局容器包括东.西.南.北.中五个区域,其中中心面板是必须的,而东.西.南.北这四个面板是可选的,如果布局里面不需要东.西.南.北这四个面板,那么可以把相应的di ...

  6. ansys 14.0

    张建伟等.2012.12 人民邮电 一天一本书,这种感觉 真是爽啊. 但我觉得什么也没学到. 话说回来,此authors 确实书写得比较一般,实例不如百度文档上的WORD实例,理论不如我看的那本CFD ...

  7. 2.在centos7虚拟机搭建nginx网站

    1.nginx配置目录 cd /etc/nginx/conf.d/ 添加 vi www.18cat.conf server{ listen 80; server_name www.18cat.com; ...

  8. hdu1022 模拟栈

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  9. JAVA 序列化_基础

    JAVA序列化 实现 Serializable 接口的对象,可以序列化为本地文件 简单示例: //序列化类 public class Test implements Serializable { pr ...

  10. 2019.3.22 SQL语句(基础篇)

    SQL语句 创建一个数据库: create database+数据库名; 使用数据库: use+数据库名; 查看mySQL中有哪些数据库: show databases; 删除数据库 drop dat ...