全局配置信息区域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