前端与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 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!2 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万2 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋2 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
伞伞悦读3 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
卡布鲁3 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
C语言小火车3 小时前
C/C++ 为什么需要编译器?
开发语言·c++
李少兄4 小时前
JavaScript 隐式全局变量解析
javascript