记录近期遇到的bug:安卓深色模式导致字体变白色、系统调大字体导致H5中picker组件失效、页面keepalive缓存导致H5先加载缓存页面的title

文章讲述了开发者在uni-app项目中遇到的两个问题:安卓深色模式下字体显示问题和H5picker组件因系统大字体失效。通过排查和解决过程,分享了如何处理这些问题以保证跨平台用户体验的一致性。
摘要由CSDN通过智能技术生成

最近遇到了些不太明显的bug,特此记录一下:

1.安卓深色模式导致字体变白色

背景:uni-app项目,同一套代码,有发布微信小程序,也有制作应用wgt包放在原生app里面。

问题:在app里面的下拉框,点开看不到内容,但能点击选择。微信小程序中正常显示。

解决过程:这个问题让我好一通找,因为本身出现问题的这个手机,是鸿蒙系统,之前开发的时候也会有别人都没有的bug。我又没办法拿他的手机调试,所以就一直在考虑是不是什么样式在鸿蒙上不兼容。后来实在想不出啥问题了,拿到他的手机,才发现,是可以点击选中的,就考虑是不是字体颜色不对了,然后换了背景色,原来是因为字体变成了白色,下拉框背景也是白色的,所以才看不见了。

原因:app根据系统模式,改成了暗黑模式,暗黑模式下,很多组件的字体颜色变成了白色,比如input、disable的button、和这次的uni-data-select。但背景也是白色,所以就看不见了。

解决办法:由于我们的ui本身就是以明亮色系为主,改成暗黑模式反而风格不统一,就让原生在进入wgt的设置中,固定成浅色模式,这样嵌套在原生的小程序,也就会固定成浅色模式了。(下图是暗黑和跟随系统,改成light就行了)。

2.系统大字体导致H5中picker组件失效

背景:嵌套在微信小程序的H5项目(umi@3.5+react@17+antd-mobile@5.20)。

问题:领导手机上,picker组件,选择日期时,在弹框里选择的日期-时间,确定后,回显的是比选择时小的时间或日期。且弹框里的日期根本不在选择的正中间显示。

原因:这部手机的微信调大了字体,导致picker的字体变大了,所以选中不准确或者没法选中。

解决:找了方法,设置了不跟随系统字体大小而改变(原文:H5字体大小不受用户手机设置影响的方法_禁止页面字体被机型字体影响-CSDN博客):

在src/pages/document.ejs里加了下面这段代码:

<script>
	(function() {
		if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
			handleFontSize();
		} else {
			if (document.addEventListener) {
				document.addEventListener("WeixinJSBridgeReady", handleFontSize, false);
			} else if (document.attachEvent) {
                document.attachEvent("onWeixinJSBridgeReady", handleFontSize);
            }
		}
		function handleFontSize() {
			// 设置网页字体为默认大小
			WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0 });
			// 重写设置网页字体大小的事件
			WeixinJSBridge.on('menu:setfont', function() {
				WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0 });
			});
		}
	})();
</script>

3.页面keepalive缓存导致H5先加载缓存页面的title

背景:嵌套在微信小程序中的H5项目(umi@3.5+react@17+antd-mobile@5.20)。每个小页面有自己的title,用<Helmet>标签包裹<title>。

问题:在弱网环境下,页面跳转时会先出现pageLoading页面,页面标题会先渲染一下之前某个页面的标题,再显示正常下一个页面(不同标题),这样会很奇怪。

解决:经过多次测试发现,只要打开过这个页面,再跳转其他页面,都会先渲染一下这个title,再渲染新页面的title。于是找这个页面与其他页面的不同之处,最后发现是缓存导致,删掉了这个页面的<KeepAlive>缓存就好了。

以上,这几个小bug一开始都不是很明显,且不方便调试,所以浪费了些时间。希望自己下次遇到同样问题能够快速定位,也能给大家提供些思路。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>