开发版、调试版、体验版的名词统一与兼容问题分析

2024-11-06
来源:网络整理

目录

1.名词的统一

红色(编译)=黄色(预览):本地开发(以下简称开发版本)。

蓝色(真机调试):分为真机调试1.0和真机调试2.0(本文使用2.0模式,以下简称调试版)。

绿色(上传):在线试用版(以下简称试用版)。

2、兼容性问题的几种情况

(1)开发版/调试版/体验版存在不一致问题。

大多数情况下,开发版/调试版正常,试用版报错。需要发布在线版本打印错误信息进行调试;

真机调试1.0和2.0有少数部分不一致。保持真机2.0调试并根据新版本进行更改;

极少部分开发版本正常,但调试版本报错。这种情况改正后,在线版就基本不会报错了。

(2)手机系统/手机型号/微信版本的兼容性问题。

目前我们只遇到手机系统引起的兼容性问题。目前还没有手机型号和微信版本。

3.问题分类3.1.Api相关3.1.1.wx.()调用页面样式不一致

具体表现场景:

在ios上调用wx.()时,先会有一个自下而上的弹窗,点击弹窗上的电话号码,然后拨打电话;

用鸿蒙调用wx.()时,直接复制电话号码,跳转到通话页面。

解决方案:

文档中曾表示,出于安全考虑,ios自动从下到上显示弹窗,确认后才会调用;非ios会自动跳转到通话页面。如果业务需求需要与ios调用方式完全统一,则需要:(1)模拟ios弹窗,编写自定义手机弹窗组件; (2)调用call api之前,确定设备型号(获取系统信息wx.()异步调用同步返回/wx.()异步返回),非ios先显示自定义手机弹窗组件,然后点击“电话号码”时调用call事件,ios直接调用API。

3.1.2.wx.oad()监听向右滑动返回上一页时不弹出查询对话框。

具体表现场景:

上向右滑动正常弹出查询对话框,【取消】停留在当前页面,【确定】返回上一页;

ios 上没有弹出窗口阻止。

微信小程序开发csdn_微信开发者工具开发小程序代码_微信小程序开发csdn

解决方案:

该API仅支持上的右滑手势,不支持iOS。同时wx.oad()只提供弹出提示,不支持自定义样式和按钮文字。回调函数是一个装饰,不能写入任何事件。如果当前页面销毁时还有其他动作,需要注意iOS兼容性问题,并在周期内执行销毁动作。同时建议循环期间也写wx.load()取消监听,避免其他页面可能弹出的弹窗。

3.2.JS处理相关 3.2.1.ios上new Date()时,时间格式不兼容

具体表现场景:

ios进行时间转换处理时,报错Cant'find or;

安卓是正常的。

解决方案:

ios时间处理方式不兼容(暂时涉及的内容包括时间组件、新数据时间处理等)。 ios时间处理不支持yyyy-mm-dd。当处理时间时,它变成NaN。事件错误为 Cant'find 或,这是必需的。将其替换为 yyyy/mm/dd,然后计算。

// 正则yyyy-mm-dd 转换 yyyy/mm/dd let newTime = oldTime.replace(/-/g,'/')

3.2.2.if(!!data)双感叹号不生效

业务处理及具体表现场景:

请求单个图片接口时,(1)根据返回的文件流判断页面是否可以渲染,有值则处理文件流,(2)无值/无返回时,url赋值为空,为空时页面显示默认图片。

判断生效,整个逻辑没有问题。

对于(2)的情况,iOS仍然遵循(1)的逻辑,这导致在执行正确的文件流程时页面不会显示默认图像。

解决方案:

因为前端做了‘data:/png;,’拼接,所以省事,在判断页面wx:if时直接加上判断条件wx:if=”{{原验证条件&&icon.!==22}}” 。

3.3.与官方组件库和样式相关(以下简称官方) 3.3.1.官方属性不限制字符长度

具体表现场景:

业务需求限制最大输入长度为196位,右下角显示[输入位数/196],这是iOS的正常限制;

和鸿蒙可以输入197位数字,右下角显示[197/196];

复制粘贴,粘贴到197位,但是右下角显示:【所有文本的位数/196】。

微信小程序开发csdn_微信小程序开发csdn_微信开发者工具开发小程序代码

解决方案:

文档说明支持的长度上限为140,但开发版本实际上最多可以输入196位,版本ios最多可以输入200(是否可以>200没有测试)。

因此,当用户输入时,使用原生JS来拦截字符串处理。同时,当≥196位时,右下角数字长度限制为196,三个系统显示相同。

let inputValNew = e.detail.value //绑定bindinput事件取值 if (inputValNew.length >= 196) { this.setData({ extension: e.detail.value.slice(0, 196), //输入框文字 textnum: 196 //右下角文字长度 }) } else { this.setData({ extension: e.detail.value, textnum: e.detail.value.length }) }

3.4.涉及第三方组件库(使用Vant)和样式(以下简称Vant) 3.4.1. Cell单元格内容未完全显示

具体表现场景:

ios和内容随高度扩展,显示多行文字;

鸿蒙单行文字显示部分文字。

解决方案:

虽然Cell单元格右侧的内容样式类已经设置为跟随内容,但是当内容为数字时,单行文字仍然显示部分文字(全英文或者英文+数字的情况下,显示效果未测试)。将Cell单元格替换为输入框,并配置:(内容自适应高度),,-:。

3.4.2.其他组件和本机其他标签之间的层次冲突

具体表现场景:

鸿蒙系统,如果页面在整个页面的顶部有弹出层或者其他标签,它会穿透所有组件/标签,成为整个页面的顶部。有时还是可以输入内容的(第一张图是穿透的,第二张图是视图被穿透的);

ios并显示正常。

解决方案:

它是一个原生组件,原生组件包括:,,,map,live-,live-,,(仅在作为原生组件出现时)。组件层次结构排序为原生 > 官方(可能)= 第三方。 (微信小程序原生组件层面引发的“杀人罪”-腾讯云开发者社区-腾讯云())

目前,小程序已正式修复iOS和上的层穿透问题。不过,部分机型和仍然时不时地重新出现。

求解方向有两个:(1)z集水平; (2)大多数时候z-无法求解。您可以编写同级标签来显示输入值。当发生渗透时,会显示同级标签。隐藏(解决关卡渗透问题|微信开放社区())。

{{extension}} // .js中根据需求控制showText变量

分享