h5项目编写成app,你还不了解吗?直接打包和套webview结合uniapp两种实现方式

这篇具有很好参考价值的文章主要介绍了h5项目编写成app,你还不了解吗?直接打包和套webview结合uniapp两种实现方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

h5的app需求

在各种需求中 大致有两类

  1. 让h5直接运行成app,有一个成熟的h5项目,想直接打包app
  2. 不想触发app更新,又能获取最新的更新效果,使用webview套h5,最终生成app

今天笔者带大家粗略实现以上的两个需求

h5直接打包app 使用hbuiderx帮助

  • 打开hbuiderx 新建项目 选择 5+app
  • 删除其他的多余文件 将自己打包生成的文件进行替换 uniapp h5打包,uni-app,html5,web app,vue,javascript
  • 一般vue和react生成打包的项目也是这种结构 引入进去 然后manifest去引入自己需求的app图标就行了
    这种比较简单粗暴 但涉及一些app的扫码拍照之类 就需要自行寻找 5+的api进行集成了

使用uniapp 将h5链接接入进来

笔者之前帮一所大学做过类似的app 有的需求就是不想要频繁更新 去下载各个版本的app,所有想采用 h5的更新方式 更加方便快捷

搭建app框架

  • 1 新建一个uniapp项目 就默认模板就行

  • 2 删除pages/index/index里的内容 添加你的webview代码进去

  • 3 pages/index/index 添加对应代码

<view class="content">
		<web-view :src="webviewUrl" 
		 @message="handleMessage"
		 ref="webview"
		 ></web-view>
	</view>
	 <!-- 	webviewUrl 就是你的h5链接地址
		 	handleMessage 是处理webview发送给app这边的消息 -->

	handleMessage(evt) {  
		console.log('接收到的消息:' + JSON.stringify(evt.detail.data));
	}
  • 4 页面获取webview实例 主动调取对应的H5方法
<script>
	var wv; //计划创建的webview
	export default {
		data() {
			return {
				canBack: false,
				isExit: true, // 是否退出
				webviewUrl: 'http://192.168.101.129:9000/?n=', // 本地 
			}
		},
		onReady() {
			// #ifdef APP-PLUS
			//如果是页面初始化调用时,需要延时一下
			var self = this;
			var currentWebview = this.$scope.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效,非v3编译模式使用this.$mp.page.$getAppWebview()
			setTimeout(function() {
				wv = currentWebview.children()[0];
				wv.addEventListener(
					'progressChanged',
					function(e) {
						wv.canBack(function(e) {
							self.canBack = e.canBack;
						});
						wv.evalJS('goBack()') // 主动调取 H5的函数 (H5需要把交互的方法挂载到window上给app使用)
					},
					false
				);
			}, 500); 
			// #endif
		},
	}
<script>

这样其实就算勉强完成app的功能了

搭建h5的页面

这里可以使用单页面应用 多页面应用 看大家自己选择 不过现在都是vue或者react直接写会比较快 操作方式都是一样的

h5页面引入 uni.webview.1.5.4.js

这一部分主要使得 h5页面可以和app产生桥梁 互相通信
这里有官方的一些链接 uni官方webview文档
uniapp h5打包,uni-app,html5,web app,vue,javascript
下载 uni.webview.1.5.4.js 到你的h5入口文件

放入入口文件 index.html

这里用vue项目举例 其他的框架举一反三即可
uniapp h5打包,uni-app,html5,web app,vue,javascript

  • 1 将下载好的 js放入一个文件夹 我这里命名sdk 按照图中的引入方式进行对应的增添代码
  • 2 去页面中执行对应的代码 如果你想监听是否引入成功 可以在h5项目 任意js逻辑部分 写下如下代码
document.addEventListener('UniAppJSBridgeReady', function(e) {
    uni.getEnv(function(res) {
      console.log('当前环境:' + JSON.stringify(res));
    });

    // 向uniapp底座发送消息
    uni.postMessage({
      data: 'H5发送的消息'
    });
  });

不难看出 uni.postMessage 就是H5向uniapp底座发送的消息 uniapp通过handleMessage去接受 看上面app部分即可

  • 3 注册函数给uniapp使用 uniapp可以通过实例直接调用 对应方法 如: wv.evalJS(‘goBack()’)
    我是在App,vue里注册的 便于集中管理
    uniapp h5打包,uni-app,html5,web app,vue,javascript

其实这样 一个简单的H5和uniapp就可以结合在一起 进行组合开发了

优化

解决物理返回键和H5页面的路由跳转问题

不难看出 我们只是在uniapp配置的入口页面引入了 H5页面来进行业务类型开发
那么H5页面本身是有路由页面切换的 但是如果采用手机本身的物理返回键 直接会退出整个应用

那么 如何去规避这个问题?让返回键也跟随H5的页面栈返回呢?

  • 1 首先 uniapp的页面是有 onBackPress 这个钩子函数 正好来捕捉物理返回键的调用 和其他一切触发返回的操作
    当它 return true 返回的操作将会失效

  • 2 我们可以在 uniapp的页面的data中定义一个是否 变量isExit 来判断是否调用真实返回退出的操作 如果是H5页面非首页内的切换后退 不会触发uniapp的返回退出操作
    uniapp h5打包,uni-app,html5,web app,vue,javascript

  • H5页面去做相关判断 如果是跳转其他页面和首页给uniapp底座发送不同消息 让app判断 isExit 具体为true还是false

webview缓存解决方案

其实webview在使用线上的链接时 是会存在缓存的 解决方案 很简单给链接拼接一个时间戳或者随机数的方式 实现每次访问不同的链接 清理缓存
但是缓存有时候又是很必要的 这就需要去考虑是否需要每时每刻刷新了
我是将他存入缓存 需要更新时去除这个缓存 重新进应用就会再次获取一个随机数 去清除缓存的文章来源地址https://www.toymoban.com/news/detail-761719.html

			let randomNum = uni.getStorageSync('randomNum')
			if (!randomNum) {
				randomNum = Math.ceil(Math.random() * 1000000000);
				uni.setStorageSync('randomNum', randomNum);
			}
			
			this.webviewUrl = this.webviewUrl + randomNum;

到了这里,关于h5项目编写成app,你还不了解吗?直接打包和套webview结合uniapp两种实现方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)

    除了使用HBuilderX工具可视化搭建项目外,DCloud官方还提供了一个脚手架用于命令行搭建项目。 uni-app项目支持 uni cli和 HBuilderX cli两种脚手架工具: uni cli:面向非HBuilderX的用户(如习惯使用vscode/webstorm的开发者),提供创建项目、编译发行等能力;在App平台,仅支持生成离线

    2024年04月16日
    浏览(76)
  • 作为前端你还不懂MutationObserver?那Out了

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源码可以找我免费领取 🔥 前端

    2024年04月29日
    浏览(36)
  • 你还不懂《顺序表》?那就不要错过这篇文章!!!

    🎇🎇🎇作者: @小鱼不会骑车 🎆🎆🎆专栏: 《java练级之旅》 🎓🎓🎓个人简介: 一名专科大一在读的小比特,努力学习编程是我唯一的出路😎😎😎 在认识顺序表前我们先认识一下线性表: 小鱼曾在一本书中看到这么一个例子他是这样介绍线性表的: 在一个幼儿园中

    2024年02月21日
    浏览(59)
  • 用了这么久rabbitmq,你还不知道它的目录结构吗?

    rabbitmq配置目录:/etc/rabbitmq/ ​ 常见配置文件有: (1)配置文件 rabbitmq.conf (2)环境变量文件 rabbitmq-env.conf (3)补充配置文件 advanced.config rabbitmq数据目录:/var/lib/rabbitmq/ 目录文件有: rabbitmq日志文件: /var/log/rabbitmq ​ 目录文件有: rabbitmq命令脚本:/usr/lib/rabbitmq/ 1.bin目录

    2024年02月16日
    浏览(48)
  • 什么?作为程序员你还不知道人工智能搜索引擎?

    作者 :明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐 : (1)《人工智能时代,软件工程师们将会被取代?》 (2)

    2024年02月10日
    浏览(74)
  • uniapp 打包H5,打包小程序,打包app分享到微信聊天、朋友圈

    1.uniapp打包H5操作手法:Hbuilder-发行-网站-PC-WEB端或手机端H5访问,需要填写个访问域名,即发布后访问的域名路径 2.uniapp打包H5配置注意事项:uniapp下manifest.json文件中H5配置相关配置,路由模式选择hash,勾选上https访问。 注:如果是本地访问没有https设置,则该项不要勾选,打

    2024年02月09日
    浏览(68)
  • 旧路由器不要扔,可当电脑无线网卡使用,你还不知道吧!

    家里有旧路由器,卖二手又不值钱,扔了又可惜。 想不到路由器还有以下这些功能: 扩大Wifi覆盖范围; 充当电脑无线网卡; 把这个技巧学起来, 提升网络冲浪的幸福感! 路由器恢复出厂设置(通用教程) 有线桥接 无线桥接 如果忘记旧路由的管理页和管理密码,则需要恢

    2024年02月09日
    浏览(38)
  • 听说你还不知道什么是 python?带你深入理解什么是 python

    各位朋友们,大家好。在之后的时间里,我将陆续为大家分享我在python学习过程中学习到的知识点,如果你也对python感兴趣的话,欢迎大家来订阅我的python专栏哦,如果大家觉得博主的文章写得不错的话,记得给博主点个赞支持一下哦! Python是一种面向对象、解释型的高级编

    2024年02月11日
    浏览(34)
  • 【C#每日一记】多线程实现的贪吃蛇原理—不允许你还不知道

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#进阶篇】 ⭐【Unityc#专题篇】之c#核心篇】 ⭐【Unityc#专题篇】之c#基础篇】 ⭐【Unity-c#专题篇】之

    2024年02月09日
    浏览(41)
  • 解决hbuilderx打包网址成为5+app,点击返回按钮直接退出app的BUG

    直接上代码 这段代码是一个HTML文件的结构,它包含了一些基础的网页元素和一个JavaScript脚本,主要用于移动应用中的webview行为控制。我将逐部分为您详细解释: HTML部分 !DOCTYPE html : 声明文档类型,这里是HTML5。 html : HTML文档的根元素。 head : 包含了文档的元(meta)数据。

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包