前端与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) { }
 }
}
 
相关推荐
高山我梦口香糖5 分钟前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235248 分钟前
前端实现获取后端返回的文件流并下载
前端·状态模式
信号处理学渣26 分钟前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客27 分钟前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
jasmine s36 分钟前
Pandas
开发语言·python
biomooc1 小时前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言
骇客野人1 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
m0_748240251 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar1 小时前
纯前端实现更新检测
开发语言·前端·javascript
404NooFound1 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql