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可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: ...
随机推荐
- json_decode转换数组过程中,结果为null处理办法,百分之百有效
json_decode这个函数是json_encode的反函数,一般传递数据的时候为了压缩数据,会将数组格式的数据转换成json格式,用到的函数就是json_encode,然后接收到数据之后再用jso ...
- Qt 学习之路 2(35):文件
Qt 学习之路 2(35):文件 豆子 2013年1月5日 Qt 学习之路 2 12条评论 文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了 ...
- 创建逻辑卷LVM以及swap分区
#!/bin/bash ##创建逻辑卷LVM /dev/mapper/lvm_data-data### ###default 大小为500G,但是LV一般会比500略小################ ...
- Python + gevent模块对单个接口进行并发测试 1
本文知识点 利用gevent模块进行并发测试 代码如下 from gevent import monkey monkey.patch_all() import requests import geve ...
- python---day14( 内置函数二)
内置函数二一:匿名函数 lambda函数 lambda 表示匿名函数,不需要用def 来申明. 语法: 函数名=lambda 参数:返回值 ----〉 案例:f=lambda n:n*n 例子01: ...
- 使用Git向GitHub上上传代码
参考:http://www.cnblogs.com/yxhblogs/p/6130995.html 如果遇到[git无法pull仓库refusing to merge unrelated histor ...
- P3345 [ZJOI2015]幻想乡战略游戏
传送门 考虑先随便找一个点作为根,然后再慢慢移动根,这样一步步走到最优的点 设 $sum[x]$ 表示节点 $x$ 的子树的军队数,$len(x,y)$ 表示 $x,y$ 之间边的长度 那么对于根节点 ...
- Codeforces - 617E 年轻人的第一道莫队·改
题意:给出\(n,m,k,a[1...n]\),对于每次询问,求\([l,r]\)中\(a[i] \ xor \ a[i+1] \ xor \ ...a[j],l<=i<=j<=r\ ...
- linux下解压rar文件
由于,linux系统内置没有这个包需要,我们用源码,添加到系统 Linux下rar unrar的安装 以3.8.0版本为例,如果是64位平台,执行以下命令,也可以去官方网站:)下载最新版:wget h ...
- spark第三篇:Cluster Mode Overview 集群模式预览
Spark applications run as independent sets of processes on a cluster, coordinated by the SparkContex ...