uniapp开发多端应用项目时的常见跨端兼容处理

news2024/11/18 2:32:13

一、跨端兼容

每个端有每个端的特点,有的能被抹平,有的不可能被抹平。
跨端,不是把web的习惯迁移到全平台。而是按照uni的写法,然后全平台使用。
按照uniapp规范开发可以保证多平台兼容,但每个平台有自己的一些特性。
uni-app在跨平台的过程中,不牺牲平台特色,不限制平台的能力使用。
应用开发中,90%的常规开发,比如界面组件、联网等api,uni-app封装为可跨多端的API。
而各个端的特色功能,uni-app引入条件编译。可以优雅的在一个项目里调用不同平台的特色能力。

二、条件编译

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。

支持的文件
  • .vue/.nvue/.uvue
  • .js/.uts
  • .css
  • pages.json
  • 各预编译语言文件,如:.scss、.less、.stylus、.ts、.pug
注意:

条件编译是利用注释实现的,在不同语法里注释写法不一样。

js/uts使用 // 注释
css 使用 /* 注释 */
vue/nvue/uvue 模板里使用 <!-- 注释 -->

在这里插入图片描述

使用条件编译请保证编译前和编译后文件的语法正确性,即要保障无论条件编译是否生效都能通过语法校验。

三、兼容处理

1、API兼容
1.1、选择图片的方法

从本地相册选择图片或使用相机拍照。

uni.chooseImage(OBJECT)

微信小程序从基础库 2.21.0 开始, wx.chooseImage 停止维护,请使用 uni.chooseMedia 代替。

在这里插入图片描述

拍摄或从手机相册中选择图片或视频。

uni.chooseMedia(OBJECT)

这个方法目前App和H5端都不支持,所以我们要做兼容处理。

在这里插入图片描述

小程序端使用方法判断

// #ifdef MP-WEIXIN
uni.chooseMedia({
  count: 1,
  mediaType: ['image'],
  success: (res) => {
    console.log(res)
  }
})
// #endif

H5和APP端使用方法判断

// #ifdef H5 || APP-PLUS
uni.chooseImage({
  count: 1,
  success: (res) => {
    console.log(res)
  }
});
// #endif
1.2、微信登录
// #ifdef MP-WEIXIN
wx.login({
  success: res => {
    // 发送 res.code 到后台换取 openId, sessionKey, unionId
  }
})
// #endif
1.3、微信支付
// #ifdef MP-WEIXIN
wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'MD5',
  paySign: '',
  success(res) {},
  fail(res) {}
})
// #endif
2、样式兼容
2.1、小程序端不支持*选择器

不可以使用

* {
    color: #333;
}

可以使用这样的写法

view,
text {
    color: #333;
}
2.2、页面视口差异(tabBar页,普通页)

小程序和APP底部的tabBar是不包含在页面高度里的,而H5端tabBar是包含的页面高度里面的。

2.2.1、定位时的兼容

不可以使用

.xxx{
  position:fixed;
  bottom:0;
}

可以使用这样的写法

.xxx{
  position:fixed;
  bottom:var(--window-bottom);
}

在这里插入图片描述

2.2.2、上拉加载更多的高度兼容

不可以使用

page{
  height:100vh;
}

可以使用这样的写法

page{
  height:100%;
}
2.3、H5端默认开启scoped

H5端是单页面应用,为了隔离页面间的样式默认启用了 scoped。
非H5端默认并未启用 scoped,如需要隔离组件样式可以在 style 标签增加 scoped 属性。
H5端默认启用了 scoped样式隔离,导致组件样式无效。

可以把组件样式抽离,组件中和页面中分别引入。

组件中引入样式

<style lang="scss">
// 此处引入组件样式
@import '@/components/styles/common.scss'
</style>

页面中引入样式

<style lang="scss">
/* #ifdef H5 || APP_PLUS */
@import '@/components/styles/common.scss';
/* #endif */
</style>
3、组件兼容

在这里插入图片描述

3.1、button按钮的联系客服

需要处理只在小程序端生效

<!-- #ifdef MP-WEIXIN -->
<button open-type="contact">客服</button>
<!-- #endif -->
3.2、button按钮的获取手机号

需要处理只在小程序端生效

<!-- #ifdef MP-WEIXIN -->
<button open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">获取手机号</button>
<!-- #endif -->

四、判断平台

平台判断有 2 种场景,一种是在编译期判断,一种是在运行期判断。

  • 编译期判断 编译期判断,即条件编译,不同平台在编译出包后已经是不同的代码。
// #ifdef H5
alert('只有h5平台才有alert方法');
// #endif

如上代码只会编译到 H5 的发行包里,其他平台的包不会包含如上代码。

  • 运行期判断 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台。
switch (uni.getSystemInfoSync().platform) {
	case 'android':
		console.log('运行Android上');
		break;
	case 'ios':
		console.log('运行iOS上');
		break;
	default:
		console.log('运行在开发者工具上');
		break;
}

如有必要,也可以在条件编译里自己定义一个变量,赋不同值。在后续运行代码中动态判断环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实用的数据集成方式

随着企业数字化转型的加速推进&#xff0c;数据集成变得愈发重要&#xff0c;它是实现信息流动和系统协同的关键步骤。 数据集成是企业数字化转型的重要一环。利用实用的数据集成方式&#xff0c;企业能够高效地实现信息流动和系统协同&#xff0c;提升企业运营效率和决策能力…

重庆东微电子推出高性能抗射频干扰MEMS硅麦放大器芯片

专业的模拟及混合信号芯片设计企业重庆东微电子股份有限公司日前宣布&#xff1a;成功开发并推出其第三代硅基微机电系统麦克风&#xff08;Silicon MEMS Microphone&#xff0c;以下简称“MEMS麦克风”&#xff09;模拟接口放大器芯片EMT6913。该芯片针对低功耗MEMS麦克风应用…

中科芯与IAR共建生态合作,IAR集成开发环境全面支持CKS32系列MCU

中国上海–2023年10月18日–嵌入式开发软件和服务的全球领导者IAR今日宣布&#xff0c;与中科芯集成电路有限公司&#xff08;以下简称中科芯&#xff09;达成生态合作&#xff0c;IAR已全面支持CKS32系列MCU的应用开发。这一合作将进一步推动嵌入式系统的发展&#xff0c;并为…

asp.net乒乓球场地管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net乒乓球场地管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net 乒乓球场地管理系统 二…

tensorrt安装使用教程

一般的深度学习项目&#xff0c;训练时为了加快速度&#xff0c;会使用多GPU分布式训练。但在部署推理时&#xff0c;为了降低成本&#xff0c;往往使用单个GPU机器甚至嵌入式平台&#xff08;比如 NVIDIA Jetson&#xff09;进行部署&#xff0c;部署端也要有与训练时相同的深…

WEB网络渗透的基础知识

网络渗透 1.什么是网络渗透 网络渗透是攻击者常用的一种攻击手段&#xff0c;也是一种综合的高级攻击技术&#xff0c;同时网络渗透也是安全工作者所研究的一个课题&#xff0c;在他们口中通常被称为”渗透测试&#xff08;Penetration Test&#xff09;”。 网络渗透的目的…

光模块对网络延迟的影响如何?

网络的延迟是网络运作过程中经常碰到的问题&#xff0c;光纤传输环节的光模块是影响网络延迟的关键因素之一。作为光通信的核心组件&#xff0c;光模块的性能直接影响到数据传输的速率、稳定性和可靠性&#xff0c;从而影响网络的延迟情况。 首先&#xff0c;传输速率越高的光…

php对接飞书机器人

有同事接到对接飞书机器人任务&#xff0c;开发中遇到响应错误&#xff1a; {"code": 19021,"msg": "sign match fail or timestamp is not within one hour from current time" } 意思应该就是签名错误或者时间戳不在有效范围内等&#xff0c…

一键更新图像或表格号

一键更新图像或表格号 首先&#xff0c;在图像或者表格处插入题注 第二步&#xff1a;在对图像描述处&#xff0c;插入交叉编译 第三步&#xff1a;如果图标编号改变了&#xff0c;右击更新域

受邀参加第 60 届中国高博会 星辰天合以 SDS 助力高校数字化转型

近日&#xff0c;第 60 届中国高等教育博览会&#xff08;以下简称&#xff1a;高博会&#xff09;在山东青岛开幕。中国高等教育学会会长杜玉波&#xff0c;山东省人民政府副省长王桂英出席开幕式并致辞。 本届高博会由中国高等教育学会主办&#xff0c;以“职普融通•产教融…

Python数据挖掘:自动售货机销售数据分析与应用

&#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于恒川的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初阶、C…

数据库复习——闭包

【例】关系模式R<U&#xff0c;F>&#xff0c;其中U{A&#xff0c;B&#xff0c;C&#xff0c;D&#xff0c;E}&#xff0c;F{AB→C&#xff0c;B→D&#xff0c;C→E&#xff0c;EC→B&#xff0c;AC→B}&#xff0c;求&#xff08;AB) 第一步&#xff0c;令X(0)AB。 …

Nexus的管理

仓库的配置 1登录以后点击设置图标&#xff0c;点击Repository 进行仓库管理 2 点击Create repository&#xff0c;选择 填写相关内容&#xff0c;阿里云仓库地址http://maven.aliyun.com/nexus/content/groups/public 点击 maven-public group进行配置&#xff0c; 角色配置…

如何实现前端音频和视频播放?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

rancher安装

官网 由于镜像比较大 所以先拉去下来 docker pull rancher/rancher:v2.5.15创建文件 mkdir -p /opt/data/rancher_data启动容器 # privileged容器操作主机权限 如果启动活不过15秒那么是失败的 docker run -d --privileged -p 80:80 -p 443:443 -v /opt/data/rancher_data:/va…

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

这里写目录标题 问题描述&#xff1a;问题模拟&#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述&#xff1a; 在mysql8查询中使用ORDER BY结合LIMIT时&#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。 问题模拟&#xff1a; 表table_lock_test&…

Ubuntu18中的连接网络图标恢复

上图的图标不存在&#xff0c;也连不上网。 输入命令停止网络管理 service NetworkManager stop删除网络管理缓存文件 sudo rm /var/lib/NetworkManager/NetworkManager.state重启网络管理 service NetworkManager start修改网络管理文件 将‘managedfalse’修改为‘man…

通讯协议学习之路:CAN协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序、…

[MoeCTF 2023]——Web方向详细Write up、Re、Misc、Crypto部分Writeup

签到 hello CTFer 将url地址复制然后打开即可 得到flag Web http 听说这个http里还有个什么东西叫饼干&#xff0c;也不知道是不是吃的 踩坑了&#xff0c;这里用连接器。。。 开启题目环境 GET方式请求&#xff0c;然后把各种请求头往里加 GET ?UwUuHeader&#xff1a; …

JS初步了解环境对象this

什么是环境对象&#xff1f; 环境对象&#xff1a;指的是函数内部特殊的变量this&#xff0c;它代表着当前函数运行时所处的环境 作用&#xff1a;弄清楚this的指向&#xff0c;可以让我们代码更简洁 在普通函数中&#xff1a; // 每个函数里面都有this 普通函数的this指向wind…