全局配置信息區域javascript
// 全局配置信息,方便配置 var hxsConfigBridge = { globalBridgeName:"hxsHybrid", globalBridgeObject:"hxsNativeBride" }
工具函數定義區域前端
window[hxsConfigBridge.globalBridgeName] = window[hxsConfigBridge.globalBridgeName] || {}; //全局註冊惟一的客戶端函數,給app端去調用客戶端 function requestHybrid ( params){ if (! params.tagName ){ alert("必須包括tagName"); return; } var tt = (new Date().getTime() ) + "_"+ Math.random() + '_'; var t = hxsConfigBridge.globalBridgeName +'_'+ params.tagName + '_' + tt; var tmpFn; //處理有回調的狀況下 if( params.callback ){ tmpFn = params.callback; // 後面有用 params.callbackT = t; window[hxsConfigBridge.globalBridgeName][t] = function (data){ tmpFn( data) } } // 發送數據函數 bridgePostMsg( params ) } // 拼接處理Url function getHybridUrl( params ){ var k,paramStr = '', url = hxsConfigBridge.globalBridgeName +'://'+params.tagName, flag = '?'; if( params.callback ){ flag = '&'; url += '?callback='+ params.callbackT } if( params.param ){ if ( typeof params.param == 'object' ){ paramStr = JSON.stringify(params.param) } url = url + flag + 'param='+ encodeURIComponent(paramStr ); } // hxsHybrid://?callback=callbackId return url; } // 使用iframe發起 url schema 給app端 function bridgePostMsg ( params){ var url = getHybridUrl( params); //兼容ios6 用 iframe var ifr = document.createElement('iframe'); ifr.id = params.callbackId; ifr.src = url; ifr.onload = function() { console.log('iframe onload loaded'); }; if( navigator.userAgent.indexOf("Android") > -1 ){ // 安卓發太快 有問題 setTimeout(function(){ document.body.appendChild(ifr); },10) }else{ document.body.appendChild(ifr); } setTimeout(function(){ document.body.appendChild(ifr); ifr.remove(); ifr = null; },1000) } // 封裝分享按鈕的函數 window[hxsConfigBridge.globalBridgeObject] = window[hxsConfigBridge.globalBridgeObject] || {}; window[hxsConfigBridge.globalBridgeObject].shareBtnInApp = function (param = {}, callback) { requestHybrid({ tagName:"shareBtnInApp", param:param, callback:function(data){ callback(data) } }) }
-----------------java
具體的場景去調用 shareBtnInApp函數ios
var __param = { name:"wwb", age:32 } window[hxsConfigBridge.globalBridgeObject].shareBtnInApp( __param, function(data){ // data是app返回的數據 // 根據app返回的data數據格式來處理業務 // { // code:200, // data:{ // name:'jerry', // work:"前端開發" // } // } if(data.code == 200){ alert("回調成功了") } })
參考:
https://www.imooc.com/learn/850app