全局配置信息区域
// 全局配置信息,方便配置
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)
}
})
}
-----------------
具体的场景去调用 shareBtnInApp函数
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/850