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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM