H5跟ios、android交互跟数据对接
需求:
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交互跟数据对接的更多相关文章
- js 与 ios Android交互
一.android 交互 1.js调用webview 在android API Level 17及以上的版本中,就会出现js调用不了android的代码,这是版本兼容的问题,需要在调用的方法上面加一个 ...
- Fiddler抓取手机端(ios+android)APP接口数据(http+https)
(1)android 环境要求: PC机和手机连接在同一网络下 工具下载地址: Fiddler网上可以下载,自行下载.注意:需要安装fiddlercertmaker(网上自行下载)进行认证 配置步骤: ...
- H5与安卓、IOS的交互,判断微信、移动设备、安卓、ios
一.通过用户代理可以判断网页当前所在的环境 var browser={ versions:function(){ var u = navigator.userAgent, app = navigato ...
- Android 与H5之间的js交互
之前项目做过一些Android和Html5之间js交互方面的东西,今天有时间就总结一下: 一.为什么要进行js交互: 为了方便原生开发和Html之间数据传递,在静态页面的情况下可以改变原生开发的页面: ...
- android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】
android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...
- 移动端H5 判断IOS还是Android 平台
1.方法 (function($) { var UA = window.navigator.userAgent; if(/Android|HTC/i.test(UA) || !!(window.nav ...
- H5移动端IOS/Android兼容性总结,持续更新中…
H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进 ...
- Android平台Camera2数据如何对接RTMP推流到服务器
1. Camera2架构 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用 ...
- iOS/Android 浏览器(h5)及微信中唤起本地APP
在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: ...
随机推荐
- mtd-util
1.1.4.1. mtd-util简介 mtd-util,即mtd的utilities,是mtd相关的很多工具的总称,包括常用的mtdinfo,flash_erase, flash_eraseall, ...
- C++_异常7-exception类
C++异常的主要目的是为了设计容错程序提供语言级支持. 即异常使得在程序设计中包含错误处理功能更加容易,以免事后采取一些严格的错误处理方式. 异常的灵活性和相对方便性激励着程序员在条件允许的情况下在程 ...
- LOJ #6432. 「PKUSC2018」真实排名
题目在这里...... 对于这道题,现场我写炸了......谁跟我说组合数O(n)的求是最快的?(~!@#¥¥%……& #include <cstdio> #include < ...
- 【KMP】【矩阵加速】【递推】洛谷 P3193 [HNOI2008]GT考试 题解
看出来矩阵加速也没看出来KMP…… 题目描述 阿申准备报名参加 GT 考试,准考证号为\(N\)位数\(X_1,X_2…X_n(0\le X_i\le9)\),他不希望准考证号上出现不吉利的数 ...
- bzoj1818 内部白点(好题) 离散化+树状数组
题目传送门 题意:给出很多黑点,当一个坐标上下左右都有黑点时,这个点也被染成黑色,问最后黑点的数量. 思路:首先,一个很显然的结论,不可能出现无限染色的情况.所以不会输出-1,当n为0或者1时,答案就 ...
- java - list 报java.lang.UnsupportedOperationException
情景 现在有个数组,比如:String[] array = new String[]{"1","2","3"}; 我们想要往这个数组中添加 ...
- Win10如何新建用户怎么添加新账户
https://jingyan.baidu.com/article/25648fc162d5899190fd0069.html 很多朋友都是安装完Windows10系统后,直接使用超级管理员账号登录系 ...
- javascript的Astar版 寻路算法
去年做一个模仿保卫萝卜的塔防游戏的时候,自己写的,游戏框架用的是coco2d-html5 实现原理可以参考 http://www.cnblogs.com/technology/archive/2011 ...
- Android高级工程师面试题整理
这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的题目.熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率. 主要分为以下几部分: (1)java ...
- css盒子居中
方法1(margin: 0 auto)<!DOCTYPE html> <html lang="en"> <head> <meta char ...