前端与APP混合联调

创建hybrid.js

javascript 复制代码
let hybrid = {
  // 具体用到哪个写哪个?
  isContainer: typeof container == 'object' && container,
  isAndroid: /android/.test(UA),
  isIOS: /iphone|ipad|ipod/.test(UA),

  // 安卓客户端
  isAndroidClient: /android/.test(UA) && typeof container != 'undefined' ,
  // ios客户端
  isIosClient: false, 
  
  // 用于判断是否是客户端
  isClient() {
  	//XXX:app名字如happy就是/happy/i.test(UA)
    return /XXX/i.test(UA) || hybrid.isAndroidClient || hybrid.isIosClient
  },

  // 是否是微信小程序
  isMiniprogram() {
    return UA.indexOf('miniprogram') > -1 && window.wx
  },
  
}
javascript 复制代码
hybrid.openScheme = function(scheme) {
  const iframe = document.createElement('iframe');
  iframe.setAttribute('id', 'iframe-scheme');
  iframe.setAttribute('src', scheme);
  iframe.setAttribute(
    'style',
    'position:absolute;z-index:-99999;top:0;right:0;bottom:0;left:-1000px;',
  );
  document.getElementsByTagName('body')[0].appendChild(iframe);
  setTimeout(function() {
    document.getElementById('iframe-scheme').remove();
  }, 1000);
}

传递给端上方法

与端上IOS定义好方法,其中t=edit_app指的某个方法,from和title是参数

javascript 复制代码
hybrid.editWeight = function(data) {
  const {from,title } = data
  hybrid.openScheme(`test-app://article?t=edit_app&from=1&title=${encodeURIComponent(title)}`)
}

//兼容安卓和IOS 的方法

javascript 复制代码
hybrid.openTab = function() {
  if (typeof container == 'object' && container && container.openTab) {
    container.openTab();
  } else {
    hybrid.openScheme('test-app://article?t=open_tab');
  }
}
javascript 复制代码
export default hybrid
javascript 复制代码
const [formData, setFormData] = useState([])

APP端给前端发送通知 直接发送传递

javascript 复制代码
window.app.editApp = (参数)=> {}  

react中直接

javascript 复制代码
useEffect(() => {
    console.log('process.env.UMI_ENV', process.env.UMI_ENV)
    initList()
    return () => {
     
    }
  }, [])
useEffect(() => {
    initList()
  }, [formData])
javascript 复制代码
const initList = () =>{
 window.app = window.app || {}  
 window.app.editApp = (v) => {
 	if (!v) return 
 	try {
 	 let data = JSON.parse(v)
 	// 对象的话
 	 let newFormData = {}
     for (let key in data) {
       newFormData[key] = data[key]
     }
     // 数组
	 let newFormData = []
     newFormData = data

     setFormData(newFormData)
 	}
 catch(e) { }
 }
}
 
相关推荐
风骏时光牛马15 分钟前
从零到实战:AI全栈学习进阶路线
前端
fanruitian16 分钟前
python else用法
开发语言·python
FRing0325 分钟前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
云深麋鹿28 分钟前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
用户3600555790031 分钟前
Kestrel_VLLM - 15 · decode 优化四连击:19ms → 8ms
前端
IT_陈寒1 小时前
JavaScript的闭包陷阱,这个坑我躺了三天才爬出来
前端·人工智能·后端
计算机魔术师1 小时前
Microsoft Research 与合作者证明 31 年历史的 KLS 猜想
前端
weixin_417396831 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
OpsEye2 小时前
怎么实现大模型的按用户、按应用配额限流?
javascript·ai编程
林恒smileZAZ2 小时前
浏览器为什么加载不了超大图片
前端·vue.js·html5