uniapp+h5混合开发

article/2025/10/8 15:41:02

为了减少app频繁上架,频繁更新,决定放弃纯uniapp开发,改用uniapp(后续简称uni)+h5的方式进行混合开发。
技术选型:
整个app架子用uni(vue3),h5采用vue3+vant4,然后使用uni的webview进行页面控制。由于我们是由vue2升级到vue3,所以之前的一些代码需要做调整,这里自己去看一下vue2和vue3的区别。在技术选型上也本着一个原则,如遇技术冲突,就以uniapp为主,h5只做页面展示。
其中还有几个点在这次升级中也提出来了,考虑到篇幅问题,这里只贴关键代码
1、页面跳转问题,uni有路由管理,h5也有路由管理,由于所有的h5界面都采用web-view方式访问,所以h5界面在开发的时候规定了不允许使用window.open(在ios系统中有可能出现无法使用的情况)和location.href方式跳转,也禁用了h5的路由方式跳转,代码如下:

//uni获取webview访问路径
//该页面名称vuePage
<template><view><web-view :src="indexUrl" @message="getMessage" @onPostMessage="getPostMessage"></web-view></view>
</template>
onLoad(param) {let _this = thislet url=decodeURI(param.vuePage)url=base64.decode(url);//"/app_dyg"+url 前端路由地址_this.indexUrl = '前端访问地址'+"/app_dyg"+url},
/*** 保留当前页面,跳转到vue界面,这种方式不需要全路径,只需要页面的路由* @param url*/
const navigateToVueView = (url) => {url = Base64.toBase64(url)window.uni.webView.navigateTo({url: '../vuePage/vuePage?vuePage=' + encodeURI(url)})
}

这种方式就是h5界面调用uni提供的路由跳转接口进行页面跳转,需要注意的是h5界面需要引入uni.webview.1.5.2.js,具体引入方式可参考官方文档,就不过多赘述。这里只列举了一种,如有其他需要可参考这段代码进行编写,下图是uni提供的部分接口
uni提供的接口
2、页面返回之后h5界面没有刷新数据问题
由于所有的h5界面都是采用的webview方式访问的,页面都是存在uni页面栈里面的,所以返回之后h5的勾子函数会失效,但是uni的onShow()是有效的,所以在页面返回之后通过evalJS传值的方式来触发h5页面的刷新,代码如下:

onShow() {// #ifdef APP-PLUSif(typeof this.$mp!='undefined' && typeof this.$mp.page!='undefined'){var currentWebview = this.$mp.page.$getAppWebview();var wv = currentWebview.children()[0]if (typeof wv != 'undefined') {setTimeout(function() {wv.evalJS('appMsg()')}, 50);}}// #endif},

由于appMsg使用频率较高,为了方便使用,我将它注册到了window下面,方便在开发过程中进行调用

//将appMsg注册到window下面
declare interface Window {uni: anytracking: anyappMsg: any
}
//在需要刷新数据的界面进行调用
window.appMsg = () => {getData()
}

3、重要信息缓存问题
在使用过程中,我们会将用户信息,token等重要信息缓存起来,尤其是token这种数据,生命周期比较短,在我们系统中只有5分钟,就需要在uni不断的刷新token,如果多端进行数据维护也比较麻烦,所以在开发过程中h5端只调用uni缓存的信息,代码如下

if (window.plus) {setData();} else {document.addEventListener('plusready', setData, false);}function setData() {sessionStorage.setItem('token', plus.storage.getItem('token'))sessionStorage.setItem('userInfo', plus.storage.getItem('user'))sessionStorage.setItem('appApiUrl', plus.storage.getItem('appApiUrl'))}

uni访问h5界面的时候都会触发该方法,所以h5界面会将uni缓存的最新数据进行存储,保证数据的一致性。这里在开发过程中遇到这样一个问题,目前主要是ios系统中发现了这个问题,就是数据缓存和页面加载不同步,也就是页面加载完了,但是token等数据还没有缓存好,所以在h5的路由配置的时候是做了一个延迟加载的处理

router.beforeEach((to: any, from, next) => {if (to.meta.title) {document.title = to.meta.title}if (to.matched.length === 0) {next('/404')} else {setTimeout(function () {next()}, 300)}
})

http://chatgpt.dhexx.cn/article/Ou6V7bQl.shtml

相关文章

H5 混合开发(更新中)

1 流行的混合开发方案 基于 WebView UI &#xff08;JSBridge&#xff09; 基于 Native UI&#xff08;ReactNative、weex&#xff09; 小程序方案&#xff08;微信、支付宝小程序&#xff09; JS通过JSBridge来调用native api&#xff0c;如拍照/扫一扫 2 H5和原生互相调用…

MATLAB+JAVA的混合开发

近期项目中需要使用matlab跟java做混合开发。主要记录一下&#xff0c;此次开发遇到的问题点。 环境&#xff1a;使用的matlab版本是 R2018b。 当前状况&#xff1a;MATLAB代码已经编写好&#xff0c;且运行成功。需要打成jar包才可以被java调用。 步骤一&#xff1a; 按照…

Unity和Android混合开发

Unity和Android混合开发 通用的流程 https://blog.csdn.net/zhangdi2017/article/details/65629589 应用场景 Unity游戏中一些功能需要安卓系统的支持&#xff0c;如搜索wifi等。而且想接入SDK时&#xff0c;很多都是针对安卓的SDK&#xff0c;很少有针对Unity的&#xff0c…

Android App混合开发

混合开发的App&#xff08;Hybrid App&#xff09;就是在一个App中内嵌一个轻量级的浏览器&#xff0c;一部分原生的功能改为Html 5来开发&#xff0c;这部分功能不仅能够在不升级App的情况下动态更新&#xff0c;而且可以在Android或iOS的App上同时运行&#xff0c;让用户的体…

混合开发Hybrid App有哪些优势和不足?

从当前移动开发的实际情况来看&#xff0c;移动端的开发方式三分天下&#xff1a;纯原生&#xff08;Native App&#xff09;、混合开发&#xff08;Hybird App&#xff09;、网页应用&#xff08;Web App&#xff09;。 纯原生&#xff08;Native App&#xff09;&#xff1…

前端混合开发

gitbook完整版集合 混合开发 混合开发 一部分原生一部分js内嵌浏览器壳web手机端网页&#xff1a;手机操作比较困难&#xff0c;一般没有手机操作权限 混合开发框架 weex&#xff1a;采用vue框架&#xff0c;可打包成appreact-native&#xff1a;采用react框架 react语法加…

什么是混合移动App开发?

这里写目录标题 什么是混合移动App开发【重点】关于移动App开发&#xff0c;需要知道的几个概念&#xff1a; 为什么要学混合App开发从程序员的角度分析&#xff1a;从企业的角度分析:(选择合适自身的移动App开发方式)【重点】 企业如何选择合适自己的App开发方式企业中项目开发…

Flutter 混合开发

在Flutter 开发中混合的形式主要有两种 作为独立的页面 进行维护可以相互嵌套 原生集成 Flutte 混合开发的步骤&#xff1a; 创建 Flutter module添加 Flutter module 依赖&#xff08;为原生项目添加 Flutter 依赖&#xff09;在 Java/Object-c 中调用 Flutter module编写 Dar…

谈谈App混合开发

混合开发的App&#xff08;Hybrid App&#xff09;就是在一个App中内嵌一个轻量级的浏览器&#xff0c;一部分原生的功能改为Html 5来开发&#xff0c;这部分功能不仅能够在不升级App的情况下动态更新&#xff0c;而且可以在Android或iOS的App上同时运行&#xff0c;让用户的体…

原生开发、H5开发与混合开发的区别

文章目录 前言三种方式分别的优缺点原生开发Web APP (HTML5&#xff09;开发混合&#xff08;原生H5&#xff09;开发 三种方式对比 前言 移动应用开发的方式&#xff0c;目前主要有三种&#xff1a; Native App&#xff1a; 本地应用程序&#xff08;原生App&#xff09; Web…

Android Hybrid混合开发

关于混合开发常问道的问题&#xff1a; Android如何嵌套h5页面&#xff1f;h5页面如何调用Android接口&#xff1f;Android如何调用网页&#xff08;js&#xff09;方法?h5页面 判断 移动端是ios、或者Android 问题1.android如何嵌套h5页面&#xff1a; 当我们用vue开发完项…

混合开发(Hybrid App)有哪些优劣点?

从当前移动开发的实际情况来看&#xff0c;移动端的开发方式三分天下&#xff1a;纯原生&#xff08;Native App&#xff09;、混合开发&#xff08;Hybird App&#xff09;、网页应用&#xff08;Web App&#xff09;。 那么&#xff0c;混合式开发与其他的两种开发模式相比&…

原生开发、H5开发和混合开发的区别

目前市场上主流的APP分为三种&#xff1a;原生APP、Web APP&#xff08;即HTML5&#xff09;和混合APP三种&#xff0c;相对应的定 制开发就是原生开发、H5开发和混合开发。那么这三种开发模式究竟有何不同呢&#xff1f;下面我们就分别从这三者各自的优劣势来区分比较吧&#…

混合开发

一、原生语言&#xff1a; 苹果手机&#xff1a;ios系统&#xff0c;由swift和c/object-c语言编写&#xff0c;后缀名为 ipa&#xff08;ios开发的安装包的后缀名&#xff09; swift语言是一种开源的语言 安卓手机&#xff1a;android系统&#xff0c;由java&#xff08;andr…

Android : 混合开发整理指南

混合开发&#xff1a; 是一种开发模式Hybrid App. 混合开发 Native Web. 另一篇博文&#xff1a;Kotlin与H5通信 场景应用&#xff1a; 例如: 微信公众号通过JSSDK连接Native端和Web端 微信小程序通过内置框架连接Native端和Web端 混合开发的核心技术&#xff1a; JS…

Hybrid APP混合开发的一些经验和总结

Hybrid APP混合开发的一些经验和总结 写在前面&#xff1a; 由于业务需要&#xff0c;接触到一个Hybrid APP混合开发的项目。当时是第一次接触混合开发&#xff0c;有一些经验和总结&#xff0c;欢迎各位一起交流学习~ 1、混合开发概述 Hybrid App主要以JSNative两者相互调用为…

【Python编程入门】引言

What is Python? Python 是由 Guido van Rossum 工程师于1991年所开发&#xff0c;是一种高级的、解释性的、交互式的通用型编程语言。它被设计成具有高度可读性&#xff0c;是一门动态编程语言&#xff0c;并且具备自动垃圾回收机制。Python支持多种编程范式&#xff0c;其中…

python编程入门到实践pdf,python编程入门课 视频

初学者学Python编程如何快速入门? 谷歌人工智能写作项目&#xff1a;小发猫 初学python入门都需要具备那些条件&#xff1f; Python相对比较简单&#xff0c;零基础也能学typescript在npm安装后检测不到。系统学习的话&#xff0c;一般4-6个月左右能学好。python是一门语法优…

Python编程:从入门到实践(基础知识)

第一章 起步 计算机执行源程序的两种方式&#xff1a; 编译&#xff1a;一次性执行源代码&#xff0c;生成目标代码解释&#xff1a;随时需要执行源代码 源代码&#xff1a;采用某种编程语言编写的计算机程序 目标代码&#xff1a;计算机可执行&#xff0c;101010 编程语言…

Python从入门到实践电子书,python编程入门到实践pdf

《Python编程从入门到实践》txt下载在线阅读&#xff0c;求百度网盘云资源 《Python编程》&#xff08;[美]埃里克马瑟斯&#xff08;Eric Matthes&#xff09;&#xff09;电子书网盘下载免费在线阅读资源链接&#xff1a;链接&#xff1a; 提取码&#xff1a;6vcz 书名&a…