混合开发-JSBridge

1.1 什么是混合开发?

混合开发是一种融合了原生开发Web开发优势的移动应用开发方式

具体来说,混合开发通常指的是利用一种框架或平台来创建应用程序,这种程序结合了原生应用的一些功能和特性(比如访问设备的摄像头、相册、GPS、蓝牙等),并且使用Web技术(HTML5、CSS和JavaScript)来编写大部分的应用代码。

1.2 混合开发优势

混合开发在跨平台能力、性能、开发效率、更新、离线运行、业务灵活性等方面都有显著优势,这些优势使混合开发成为许多开发者和企业的首选开发模式。

  1. 跨平台能力:混合开发的一个主要优点是可以编写一次代码,然后部署到多个平台(如iOS/Android/HarmonyOS),这大大节省了开发和维护成本。
  2. 快速迭代:由于混合应用主要使用Web技术,因此它们可以像网页一样进行快速更新和迭代,无需用户手动更新应用。
  3. 用户体验:虽然混合应用在性能上可能不如完全的原生应用,但随着技术的发展,许多混合开发框架已经能够提供接近原生应用的用户体验。
  4. 成本效益:对于预算有限的项目或初创公司来说,混合开发是一个成本效益较高的选择,因为它减少了为每个平台单独开发应用的需要。

设置加载进度条

 // 网页是否在加载中@State loading: boolean = true// 网页加载的进度@State progress: number = 0// ....// 堆叠组件Stack({ alignContent: Alignment.Top }){// 如果加载中, 则显示进度条插件if (this.loading) {Progress({ type: ProgressType.Linear, value: this.progress, total: 100 }).style({ strokeWidth: 2, enableSmoothEffect: true }).color($r('app.color.red')).zIndex(1)}}.width('100%').layoutWeight(1)

 设置Web组件加载网页

src: ResourceStr = 'https://m.suning.com'  // 加载的页面地址
// ...
// 网页加载的进度
@State progress: number = 0
// 页面视图控制器
controller = new webview.WebviewController()// ...// 堆叠组件
Stack({ alignContent: Alignment.Top }){// 如果加载中, 则显示进度条插件if (this.loading) {Progress({ type: ProgressType.Linear, value: this.progress, total: 100 }).style({ strokeWidth: 2, enableSmoothEffect: true }).color($r('app.color.red')).zIndex(1)}// web组件: 用于加载在线网页Web({ src: this.src, controller: this.controller })
}
.width('100%')
.layoutWeight(1)
  1. 设置进度条 显示/隐藏 和 加载进度

onPageBegin: 开始加载网页时触发

onPageEnd: 网页加载完成时触发

onProgressChange: 网页加载进度变化时触发该回调

// web组件: 用于加载在线网页
Web({ src: this.src, controller: this.controller })// 网页加载进度变化时触发该回调.onProgressChange((data) => { // 1. 进度条console.log('mk-logger', JSON.stringify(data)) // 新的加载进度,取值范围为0到100的整数if (data) {// 1.1 记录加载进度this.progress = data.newProgress// 1.2 如果加载进度完成if (data.newProgress === 100) {// 1.3 动画让进度条消失animateTo({ duration: 300, delay: 300 }, () => {this.loading = false})}}})// 开始加载网页时触发.onPageBegin(() => { this.progress = 0this.loading = trueconsole.log('mk-logger', 'onPageBegin')})// 网页加载完成时触发.onPageEnd(() => { console.log('mk-logger', 'onPageEnd')})

导航栏相关操作处理

 1.导航左侧处理

 

返回处理(最左边返回按钮): 在webview中, 如果当前网站页面之前有页面则控制器内返回上一个网页的页面, 如果没有则原生侧路由返回

关闭处理(左边第二个x号按钮): 原生侧路由返回,直接回到App的上一个页面

// ...
// 加载网页页面完成时触发该回调,用于应用更新其访问的历史链接
.onRefreshAccessedHistory(() => { const history = this.controller.getBackForwardEntries()  // 获取当前Webview的历史信息列表this.historyCurrIndex = history.currentIndex  // 当前在页面历史列表中的索引this.historySize = history.size  // 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖// AlertDialog.show({message: this.historyCurrIndex + '-' + this.historySize })})
  webBack() {// 如果在web容器中, 当前页面之前还有页面, 则容器内返回上一页if (this.historyCurrIndex > 0) {this.controller.backward()} else {router.back()}}webClose() {router.back()}

 2.导航下拉菜单-刷新

 @BuilderMenuBuilder() {Menu() {MenuItem({ content: '首页' }).onClick(() => router.back({ url: 'pages/Index', params: { index: 0 } }))MenuItem({ content: '分类' }).onClick(() => router.back({ url: 'pages/Index', params: { index: 1 } }))MenuItem({ content: '购物袋' }).onClick(() => router.back({ url: 'pages/Index', params: { index: 2 } }))MenuItem({ content: '我的' }).onClick(() => router.back({ url: 'pages/Index', params: { index: 3 } }))MenuItem({ content: '刷新一下' })//利用Webview控制器的refresh方法刷新页面.onClick(() => this.controller.refresh())}.width(100).fontColor($r('app.color.text')).font({ size: 14 }).radius(4)}

 3.导航条标题设置

// 网页document标题更改时触发该回调
.onTitleReceive((data) => { console.log('mk-logger', 'onTitleReceive')this.title = data?.title || ''
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146939.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DAMODEL——Llama3.1的部署与使用指南

Llama3.1的部署与使用指南 在自然语言处理(NLP)领域,大模型(LLM)是基于深度学习算法训练而成的重要工具,应用范围包括自然语言理解和生成。随着技术的发展,开源的LLM不断涌现,涵盖了…

Windows上通过VirtualBox安装Linux虚拟机

目录 一、安装VirtualBox 1. 下载VirtualBox 2. 安装VirtualBox 二、使用VirtualBox安装Linux系统 1. 下载Linux镜像 2. 使用VirtualBox新建虚拟环境 三、常见问题解决办法 1. Terminal打不开系统字符乱码 2. 窗口小和分辨率不匹配 一、安装VirtualBox 1. 下载Virtu…

10.2 溪降技术:双重检查

目录 10.2 双重检查概览观看视频课程电子书:双重检查场景场景 1场景 2 个人责任示例 1示例 2 总结 10.2 双重检查 概览 俗话说:“江山易改,本性难移”。在我们开始体验峡谷探险时,培养良好的习惯对我们的进一步发展至关重要。在所…

重生之我们在ES顶端相遇第15 章 - ES 的心脏-倒排索引

文章目录 前言为什么叫倒排索引数据结构如何生成如何查询TF、IDF参考文档 前言 上一章,简单介绍了 ES 的节点类型。 本章,我们要介绍 ES 中非常重要的一个概念:倒排索引。 ES 的全文索引就是基于倒排索引实现的。 本章内容建议重点学习&…

实现人体模型可点击

简化需求:实现项目内嵌人体模型,实现点击不同部位弹出部位名称 一:优先3d, 方案:基于three.js,.gltf格式模型,vue3 缺点:合适且免费的3d模型找不到,因为项目对部位有要…

Python实现贝叶斯优化器(Bayes_opt)优化卷积神经网络-双向长短时记忆循环神经网络回归模型(CNN-BiLSTM回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着大数据和计算能力的提升,深度学习模型在众多领域取得了显著的成功。然而,这…

Nature Communications|一种快速响应的智能可穿戴嗅觉接口(可穿戴电子/柔性电子/人机交互)

香港城市大学于欣格( Xinge Yu)、北京航空航天大学李宇航(Yuhang Li)、中国特种设备检验研究所赵召(Zhao Zhao)和东京大学Takao Someya团队,在《Nature Communications》上发布了一篇题为“Intelligent wearable olfactory interface for latency-free mixed reality and …

HAL库-4.3寸电容式接触屏LCD驱动(未完成)

目录 1.LCD介绍: 工作原理 显示特性 优缺点 2.LCD与OLED的区别: 1. 工作原理 2. 显示效果 3. 屏幕厚度与重量 4. 能耗 5. 寿命与稳定性 6. 应用场景 实验所用模块:ATK-4.3’ TFTLCD 原理图模块与数据手册介绍: LCD驱…

OpenAI GPT o1技术报告阅读(5)-安全性对齐以及思维链等的综合评估与思考

✨继续阅读报告:使用大模型来学习推理(Reason) 原文链接:https://openai.com/index/learning-to-reason-with-llms/ 编码 我们训练了一个模型,在2024年国际信息学奥林匹克竞赛(IOI)中得分213分,排名在第…

大数据实验一: Linux系统安装和使用

一、实验目的 描述Ubuntu的安装过程;使用命令完成Ubuntu中的基础操作; 二、实验平台 操作系统:window系统;内存:4G以上;硬盘:100GB以上;Virtual Box或者VMware;Ubuntu…

当大语言模型应用到教育领域时会有什么火花出现?

当大语言模型应用到教育领域时会有什么火花出现? LLM Education会出现哪些机遇与挑战? 今天笔者分享一篇来自New York University大学的研究论文,另外一篇则是来自Michigan State University与浙江师范大学的研究论文,希望对这个话题感兴趣…

Java反序列化利用链篇 | CC6链分析(通用版CC链)

文章目录 CC6和CC1之间的区别CC6的调用链构造CC6的payload完成TiedMapEntry.getValue()完成TiedMapEntry.hashCode()完成HashMap.hash()及HashMap.readObject()解决hash()方法提前触发的问题 系列篇其他文章,推荐顺序观看~ Java反序列化利用链篇 | JdbcRowSetImpl利…

FastAPI 的隐藏宝石:自动生成 TypeScript 客户端

在现代 Web 开发中,前后端分离已成为标准做法。这种架构允许前端和后端独立开发和扩展,但同时也带来了如何高效交互的问题。FastAPI,作为一个新兴的 Python Web 框架,提供了一个优雅的解决方案:自动生成客户端代码。本…

C语言-文件操作-一些我想到的、见到的奇怪的问题

博客主页:【夜泉_ly】 本文专栏:【C语言】 欢迎点赞👍收藏⭐关注❤️ C语言-文件操作-一些我想到的、见到的奇怪的问题 前言1.在不关闭文件的情况下,连续多次调用 fopen() 打开同一个文件,会发生什么?1.1过…

简单多状态dp第三弹 leetcode -买卖股票的最佳时机问题

309. 买卖股票的最佳时机含冷冻期 买卖股票的最佳时机含冷冻期 分析: 使用动态规划解决 状态表示: 由于有「买入」「可交易」「冷冻期」三个状态,因此我们可以选择用三个数组,其中: ▪ dp[i][0] 表示:第 i 天结束后&#xff0c…

基于主从Reactor模型实现高并发服务器

目录 1. 项目简介1.1 环境介绍1.2 项目定位1.3 功能模块整体划分 2. Reactor简介2.1 Reactor模型分析2.2 多Reactor多线程分析:多I/O多路复用线程池(业务处理) 3. 日志宏的编写4. Server模块4.1 Buffer模块4.1.1 Buffer的功能4.1.2 Buffer的实…

AI健身之俯卧撑计数和姿态矫正-角度估计

在本项目中,实现了Yolov7-Pose用于人体姿态估计。以下是如何在Windows 11操作系统上设置和运行该项目的详细步骤。 环境准备 首先,确保您的计算机已经安装了Anaconda。Anaconda是一个开源的Python发行版本,它包含了conda、Python以及众多科…

Python基于TensorFlow实现时间序列循环神经网络回归模型(LSTM时间序列回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着信息技术的发展和传感器设备的广泛应用,时间序列数据的产生量急剧增加。无论是股市价格…

Windows本地连接远程服务器并创建新用户详细记录

前提可知: (1)服务器IP地址:x.x.x.x (2)服务器名称:root(一般默认为root,当然也有别的名称) (3)服务器登陆密码:**** 一、…

优化下载性能:使用Python多线程与异步并发提升下载效率

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 普通请求下载📝 使用多线程加速下载📝 使用异步编程加速下载📝 总结 📝⚓️ 相关链接 ⚓️📖 介绍 📖 你是否因为下载速度慢而感到焦虑?特别是在下载大型文件时,等待进度条慢慢移动的感觉真的很…