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

2023-10-21 07:20

本文主要是介绍uniapp开发多端应用项目时的常见跨端兼容处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、跨端兼容

每个端有每个端的特点,有的能被抹平,有的不可能被抹平。
跨端,不是把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;
}

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

这篇关于uniapp开发多端应用项目时的常见跨端兼容处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/252833

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变