在前端html5中和App通讯方式的示例分析
小编给大家分享一下在前端html5中和App通讯方式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
前言
现在不管是桌面客户端还是移动客户端,都会夹杂着一部分H5页面,这种混合式的应用也是我们常说的Hybrid App。为什么会出现Hybrid App呢,早期是因为开发一个Android或iOS的客户端,需要的人力成本比较大,开发周期比较长,后来有些团队就通过将部分页面拆分出来,由前端来完成,再通过在客户端里的Webview来展示。
由于小编我半路转行当程序猿,只对前端领域有所了解,对其他编程领域接触较少,故不探讨Webview的实现原理和与H5页面交互的原理。有兴趣的小伙伴自行百度搜索JSBridge的相关知识,或请教下客户端(Windows、MacOS、Android、iOS)开发的同学,看看如何桥接JS与其他编程语言之间的联系。
优缺点
凡事都是有好有坏,没有绝对的解决方案。下面我总结下Hybrid App在开发过程中存在的优缺点,各位同学可自行判断Hybrid App的好坏。
优点
H5页面交由前端进行开发,页面模块之间分开开发和维护,有效减少App的开发周期
H5页面不受限于应用商店繁琐的审核流程和冗长的等待时间,新增页面和功能、修复缺陷都可随时部署到线上
H5页面在有需要时才加载,减小App打包后的大小,缩短App在应用商店下载的时间和减少本地占用手机的空间
H5页面接入App Webview中,不再受限于浏览器,可通过与App交互调用设备更多底层的API来完善更多原本浏览器无法完成的操作
缺点
协定好H5和App之间的通讯协议,定义好全局属性和全局方法在两者之间如何调用
H5页面接入App Webview中,可能会出现很多兼容问题,需要前端和客户端多加注意
开发前需按照需求和交互进行页面划分,哪些页面归前端开发,哪些页面归客户端开发
页面出现Bug有时候很难发现是在哪个环节出错,需要前端和客户端共同调试找出问题所在(可能各抒己见,打架都有份)
通讯方式
以下代码全部基于前端(React)进行演示,客户端如何实现JS交互我就不多说了,可以找客户端开发的同学了解下。通讯方式有如下两种,都是使用JS代码来完成,兼容性还是挺不错的。
前端通知客户端:拦截
客户端通知前端:注入
前端通知客户端
在H5页面里触发链接跳转,App Webview检测到链接跳转再进行拦截,因此可以通过URL上携带参数来告知App下一步应该做些什么。
import React, { Component } from "react";export default class App extends Component { componentDidMount() { location.href = "lsbox://toast?msg=页面加载完毕"; // 通知App } render() { return ( ); } openMask() { location.href = "lsbox://mask?toggle=1"; // 通知App }}以上执行了location.href = "lsbox://mask?toggle=1"来通知App打开遮罩层
lsbox:前端和客户端统一定义链接跳转的协议(喜欢怎样定义协议都行)
mask:App需要执行的动作(喜欢怎样定义动作都行)
toggle=1:动作执行参数(自定义参数,用于告知App怎样做)
如果同步触发两个或以上的location.href(下一个location.href接着上一个location.href),App可能只会接收到一个location.href发出的通知,所以需要对下一个location.href使用setTimeout设置通知时间间隔(可使用Async/Await封装优化):
location.href = "lsbox://toast?msg=one";setTimeout(() => { location.href = "lsbox://toast?msg=two"; setTimeout(() => { location.href = "lsbox://toast?msg=three"; }, 100);}, 100);客户端通知前端
注入一些全局方法,App Webview直接操作全局方法来控制H5页面,使用window.handleFunc = function() {}这样的形式来定义注入的方法。
import React, { Component } from "react";export default class App extends Component { constructor(props) { super(props); this.state = { list: [0, 1, 2, 3, 4] }; } componentDidMount() { window.addNum = this.addNum.bind(this); // 暴露方法给App } render() { return ( {this.state.list.map(v => - {v}
)}
; ); } addNum(num) { this.setState(prevState => ({ list: prevState.list.concat(num); })); }}以上是"在前端html5中和App通讯方式的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
页面
客户
客户端
前端
开发
通讯
方法
方式
之间
全局
动作
参数
同学
时间
更多
篇文章
链接
应用
示例
分析
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
昆明移动软件开发公司
服务器没硬盘能开机吗
关闭对称密钥对数据库的影响
软件开发项目成本控制
数据库保存时间
网络安全法关于人脸识别
u8管理服务器在哪启动
校园网网络技术的选择
FTP 备份 服务器
sql数据库第二次安装
服务器可以开服吗
2021年网络技术
数据库字段解密
我的世界服务器主人模仿him
海淀区软件开发概况
中国网民的网络安全的认识
无法连接服务器补丁失败
cae 服务器集群
北京天际时空网络技术
战地1怎么加入官方服务器
根据数据库生成po
云服务器要考虑安全问题吗
cas服务器
数据库看不到所有视图
工信部加强网络安全工作
海信电视升级服务器网址
网络安全苏州华为招聘信息
网络安全的数据损坏是什么意思
老男孩网络安全VIP视频
软件开发公司交对少税