zoukankan      html  css  js  c++  java
  • H5跟ios、android交互跟数据对接

    需求:

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

    方法:

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

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

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

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

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

    完整的案例:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scale=no">
     6     <title>对接app</title>
     7 </head>
     8 <body>
     9 <div class="ios">
    10     <a href="index.html" data-href="1">ios点击按钮</a>
    11 </div>
    12 <div class="android">
    13     <a href="index.html" data-href="2">android点击按钮</a>
    14 </div>
    15 <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    16 <script type="text/javascript">
    17 var u = navigator.userAgent; //获取用户设备
    18 var isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    19 
    20 $("a").click(function(){
    21     var href = $(this).attr("data-href");
    22     if (isIOS && window.WebViewJavascriptBridge) { //ios app 设备才执行
    23         $(this).attr("href","javascript:;");//禁止H5页面跳转
    24         WebViewJavascriptBridge.callHandler('goDetail', {"data": href,'type':"1"}, function(){
    25 
    26         });
    27         return false;
    28     }
    29 });
    30 // 安卓app才调用的方法
    31 function gotoAndroidApp() {
    32     $("a").click(function(){
    33         $(this).attr("href","javascript:;");
    34         var href = $(this).attr("data-href");
    35         window.androidVik.goodsDetail(href,1);
    36         return false;
    37     });
    38 }
    39 </script>
    40 </body>
    41 </html>

     2017年11月06日:更新

     1 <script type="text/javascript">
     2     $(function(){
     3         // APP点击
     4         var u = navigator.userAgent; //获取用户设备
     5         var isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
     6 
     7         if (isIOS) { //ios app 设备才执行
     8             
     9             /*这段代码是固定的,必须要放到js中*/
    10             function setupWebViewJavascriptBridge(callback) {
    11               if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
    12               if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
    13               window.WVJBCallbacks = [callback];
    14               var WVJBIframe = document.createElement('iframe');
    15               WVJBIframe.style.display = 'none';
    16               WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
    17               document.documentElement.appendChild(WVJBIframe);
    18               setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0);
    19             }
    20 
    21             /*与OC交互的所有JS方法都要放在此处注册,才能调用通过JS调用OC或者让OC调用这里的JS*/
    22             setupWebViewJavascriptBridge(function(bridge) {
    23 
    24              /*JS给ObjC提供公开的API,在ObjC端可以手动调用JS的这个API。接收ObjC传过来的参数,且可以回调ObjC*/
    25                 bridge.registerHandler('getUserInfos', function(e) {
    26                     gotoIosApp(e);
    27                     gotoRotate(e);
    28                 });
    29             });
    30         }
    31     }); 
    32 
    33     // 苹果app才调用的方法
    34     function gotoIosApp(e){
    35         $(".rotateList a").click(function(){
    36             $(this).attr("href","javascript:;");//禁止H5页面跳转
    37             var goodsId = $(this).attr("goods-id");
    38             WebViewJavascriptBridge.callHandler('goodsDetail', {"code": '200',"data": goodsId}, function(){});
    39             return false;
    40         }); 
    41     }
    42 
    43     function gotoRotate(e){
    44         // 判断用户有没登录
    45         var isTrue = {$is_login};
    46         
    47         $(".rotateBtn").click(function(){
    48             if (isTrue) {
    49                 $(this).bind("click");
    50                 WebViewJavascriptBridge.callHandler('clickButton', {"code": '200',"login":"1"}, function(){});
    51             } else {
    52                 $(this).unbind("click");
    53                 WebViewJavascriptBridge.callHandler('clickButton', {"code": '200',"login":"0"}, function(){});
    54             }
    55         }); 
    56     }
    57     // 安卓app才调用的方法
    58     function gotoAndroidRotate(e) {
    59         
    60         var isTrue = {$is_login};
    61 
    62         $(".rotateBtn").click(function(){
    63             if (isTrue) {
    64                 $(this).bind("click");
    65                 
    66             } else {
    67                 $(this).unbind("click");
    68                 window.androidVik.clickLuck();
    69                 
    70             }
    71         }); 
    72         $(".rotateList a").click(function(){
    73             $(this).attr("href","javascript:;");//禁止H5页面跳转
    74             var goodsId = $(this).attr("goods-id");
    75             window.androidVik.goodsDetail(goodsId);
    76             return false;
    77         });
    78     }
    79 </script>
  • 相关阅读:
    VMware安装ubuntu学习笔记(只是笔记)
    Apcahe Shiro学习笔记(二):通过JDBC进行权限控制
    Apcahe Shiro学习笔记(一):简介及运行官方Demo
    MyBatis学习(二):与Spring整合(非注解方式配置MyBatis)
    SpringMVC学习(一):搭建SpringMVC-注解-非注解
    java操作redis学习(一):安装及连接
    MyBatis学习(一):简单的运行
    Linux随笔记
    [搬运]一些构造题题解
    「不会」Min25筛
  • 原文地址:https://www.cnblogs.com/zhengshize/p/7685936.html
Copyright © 2011-2022 走看看