需求:
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>
