前端与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) { }
 }
}
 
相关推荐
温宇飞1 分钟前
Web Abort API - AbortSignal 与 AbortController
前端
Tomoon2 分钟前
前端开发者的全栈逆袭
前端
一念&14 分钟前
每日一个C语言知识:C 数组
c语言·开发语言·算法
小年糕是糕手16 分钟前
【数据结构】单链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
疯狂吧小飞牛27 分钟前
Lua C API 中的 lua_rawseti 与 lua_rawgeti 介绍
c语言·开发语言·lua
Tony Bai30 分钟前
【Go 网络编程全解】06 UDP 数据报编程:速度、不可靠与应用层弥补
开发语言·网络·后端·golang·udp
半夏知半秋30 分钟前
lua对象池管理工具剖析
服务器·开发语言·后端·学习·lua
Filotimo_36 分钟前
2.CSS3.(3).html
前端·css3
whyfail39 分钟前
React v19.2版本
前端·javascript·react.js