位置: IT常识 - 正文

uniapp+h5混合开发(uniapp和vue混合开发)

编辑:rootadmin
uniapp+h5混合开发

推荐整理分享uniapp+h5混合开发(uniapp和vue混合开发),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:uniapp开发h5兼容问题,uniapp内嵌h5,uniapp和vue混合开发,uniapp内嵌h5,uniapp开发的h5和普通的h5,uniapp开发的h5和普通的h5,uniapp开发的h5和普通的h5,uniapp开发的h5和普通的h5,内容如对您有帮助,希望把文章链接给更多的朋友!

uniapp+h5混合开发(uniapp和vue混合开发)

为了减少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提供的部分接口 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: any tracking: any appMsg: 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) }})
本文链接地址:https://www.jiuchutong.com/zhishi/296055.html 转载请保留说明!

上一篇:Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问(node.js环境搭建)

下一篇:vue-treeselect 的基本使用(vue treegrid)

  • 小米穿戴搜不到小米手表(小米穿戴搜不到小米手环3)

    小米穿戴搜不到小米手表(小米穿戴搜不到小米手环3)

  • ipad1现在还能用吗(iPad1现在还能用吗)

    ipad1现在还能用吗(iPad1现在还能用吗)

  • 加速器是干什么用的(加速器是干什么使的)

    加速器是干什么用的(加速器是干什么使的)

  • 转转可以微信支付吗 (虚拟微信转账生成器免费版)

    转转可以微信支付吗 (虚拟微信转账生成器免费版)

  • g1840是几代(g1840哪一年出的)

    g1840是几代(g1840哪一年出的)

  • qq怎么设置特别关心铃声(qq怎么设置特别关心群)

    qq怎么设置特别关心铃声(qq怎么设置特别关心群)

  • qq黄钻对其隐身是什么意思(qq黄钻对其隐身和删痕迹是什么意思)

    qq黄钻对其隐身是什么意思(qq黄钻对其隐身和删痕迹是什么意思)

  • 手机如何下载电脑游戏(手机如何下载电视剧到手机)

    手机如何下载电脑游戏(手机如何下载电视剧到手机)

  • 字符常量合法的是(字符串常量的合法形式)

    字符常量合法的是(字符串常量的合法形式)

  • ios12有什么(ios12有什么不可以用了)

    ios12有什么(ios12有什么不可以用了)

  • 飞行模式短信会延迟吗(飞行模式短信会提示吗)

    飞行模式短信会延迟吗(飞行模式短信会提示吗)

  • 苹果11快充发烫正常吗(苹果11快充发烫怎么解决)

    苹果11快充发烫正常吗(苹果11快充发烫怎么解决)

  • 小米note5怎么没有开发者选项(小米note5g手机)

    小米note5怎么没有开发者选项(小米note5g手机)

  • iphone怎么取消恢复模式吗(如何取消苹果数据恢复)

    iphone怎么取消恢复模式吗(如何取消苹果数据恢复)

  • 华为mate30pro耐摔吗(华为mate30pro抗摔吗?)

    华为mate30pro耐摔吗(华为mate30pro抗摔吗?)

  • qq怎么开启自动翻译语音(qq怎么开启自动点赞)

    qq怎么开启自动翻译语音(qq怎么开启自动点赞)

  • 手机定时关机定时开机怎么做(手机定时关机定时开机对手机有影响吗)

    手机定时关机定时开机怎么做(手机定时关机定时开机对手机有影响吗)

  • 荣耀20pro怎么退出程序(荣耀20pro怎么退出talkback)

    荣耀20pro怎么退出程序(荣耀20pro怎么退出talkback)

  • 3040x1440分辨率是几k(3040x1440分辨率是多少)

    3040x1440分辨率是几k(3040x1440分辨率是多少)

  • outlook中国选哪个时区(outlook国内能用吗)

    outlook中国选哪个时区(outlook国内能用吗)

  • Redmi K20 Pro前后摄像头像素(红米k20pro后面)

    Redmi K20 Pro前后摄像头像素(红米k20pro后面)

  • iPhone Xs Max的机身容量有几种(iPhone xs max的机身尺寸)

    iPhone Xs Max的机身容量有几种(iPhone xs max的机身尺寸)

  • 苹果x可以换主题吗(苹果x换主板面容还能用吗?)

    苹果x可以换主题吗(苹果x换主板面容还能用吗?)

  • 微信为何不能收红包(微信为何不能收付款)

    微信为何不能收红包(微信为何不能收付款)

  • s8轻奢版和s8的区别(s8轻奢版参数)

    s8轻奢版和s8的区别(s8轻奢版参数)

  • 农产品加工企业怎样申请营业执照?
  • 本期收入和本期免税收入有什么区别
  • 安装服务费增值税专票税率多少
  • 应付账款里的暂估
  • 围挡属于什么类型
  • 怎么控制酒店的设备
  • 年报会计师审计费用
  • 咨询费计入什么明细科目
  • 申报企业所得税流程
  • 资产负债表本月期末余额怎么填
  • 通讯费没有公司抬头怎么报销
  • 应纳税额减征额包括哪些内容
  • 房地产企业如何进行市场细分
  • 房地产中心
  • 工程项目立项前的安全评估
  • 包装设置图片
  • 个体户如何做零申报
  • 货物保管不善交来的罚款账务处理?
  • 房地产开发企业预收款预缴增值税
  • 支付的劳务派遣费计入什么科目里
  • 股东租车给公司押金
  • 免税收入的财税处理
  • 补充养老保险交200和500差别
  • 人工费开专票最多能开几个点的
  • 营改增文件2019
  • 把黑龙江省
  • 电费先付后开票怎么做账
  • 固定资产在什么时候计提折旧
  • 三代税款手续费是什么意思
  • 电子商务公司的简介
  • win10系统中为什么网络图标不能展开
  • PHP:token_name()的用法_Tokenizer函数
  • 继承房产印花税是按交易分额交吗
  • 福利费入账要求
  • 计算机领域划分
  • vue基础知识
  • 计算机视觉的未来发展方向有哪些
  • 应收账款的
  • 待抵扣进项税额的分录
  • 存货跌价准备的账务处理
  • 核销发生的坏账损失
  • 去年的滞纳金没有入账怎么处理
  • 存货出入库需要什么凭证
  • access导入到mysql
  • 缴税零申报
  • 固定资产未入账的定性依据
  • 预提费用是应付账款吗
  • 购销合同印花税税率
  • 小型微利企业是小微企业吗
  • 收到股东的投资款现金流量表
  • 工资个税什么时候用综合所得公式计算
  • 预付检测费未收到发票
  • 企业管理理费包括哪些
  • 暂估入库估多了,汇算清缴前调整
  • 房屋租赁合同印花税怎么计算
  • 支付职工一次性补助
  • 增值税直接减免额怎么做账
  • 可变现净值是什么意思
  • 一般纳税人出现以下哪些情况时,其进项税额不得抵扣( )
  • 资产减值损失和资产减值准备的区别
  • 公司在筹备阶段怎么办
  • 在建工程预付款授信
  • MySQL replace into 语句浅析(一)
  • 懒癌患者如何自救
  • windows cortana打开
  • os x10.11el capitan beta5更新了什么?os x10.11el capitan beta5下载地址
  • win10系统锁屏后不弹出解锁界面
  • windows用户注册
  • win10如何关闭windows
  • zmweb.exe是什么进程
  • windows8如何降到windows7
  • 手把手教你在家制作豆腐脑
  • Node.js中的什么模块是用于处理文件和目录的
  • Node.js中的全局对象有
  • javascript学习指南
  • 聊天界面的新消息通知设置 找不到
  • js 截取
  • 如何安装python环境安装包
  • [转]决算中甲供材如何扣除?
  • 珠海地区电话区号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设