原因:微信小程序可以在修改组件的properties的传值之后、立即调用组件方法;
uniapp在修改组件prop的传值之后,需要在this.$nextTick
中调用组件方法。
但是在百度小程序里,即使有this.$nextTick
依然没有解决这个问题,于是又追加了一个setTimeout
。
解决:用最新的基础库。
当重复设置某些属性为相同的值时,不会同步到view层。 例如:每次将scroll-view组件的scroll-top属性值设置为0,只有第一次能顺利返回顶部。 这和props的单向数据流特性有关,组件内部scroll-top的实际值改动后,其绑定的属性并不会一同变化。
解决:组件属性设置不生效解决办法
百度小程序即使没授权过,通过getSetting获取的authSetting中的scope.userInfo也为true。
支付宝小程序获取的authSetting中的用户信息授权状态对应的key不是scope.userInfo,而是userInfo。
原因:swiper-item组件上不可以绑定内联样式(:style)。
解决:用base64代替图片。
原因1: 未压缩。
解决:在package.json的dev:mp-qq的配置末尾添加“–minimize”。
原因2:uniapp生成的qq小程序的vender.js文件中的sourceMappingURL过大。
解决:vue.config.js中配置:当process.env.UNI_PLATFORM === 'mp-qq'
时productionSourceMap = false
。
原因:不明。可能问题即原因。
另外,字节跳动小程序不支持canvas。
解决:不通过被赋值了this.$refs.xxxComponent
的变量调用组件的方法,而是每次都用this.$refs.xxxComponent.xxxMethod()
的方式调用组件的方法。
解决:用tt.getSystemInfoSync().appName.toUpperCase() === 'DOUYIN'
来判断。
(1)在字节跳动的style中发现:
:host{
display:block;
white-space: normal;
}
的代码。
因为影响的范围不大,单独在两处设置了一下white-space的值即解决。
(2)头条的样式在对连续几个嵌套的元素使用height: 100%时会出问题。
只有微信、QQ、百度的button有getuserinfo事件。
头条调用getUserInfo弹起授权弹窗,如果点击取消后即拒绝授权,以后再也不能弹出(微信是从来不会弹窗)。这时候,只能靠openSetting来引导用户打开权限后,再调用getUserInfo获取用户信息。
虽然百度的button有getuserinfo事件,但百度的getUserInfo接口不能调用。可以把button的getuserinfo事件获取到的数据存起来,以模拟一个getUserInfo接口。
支付宝获取用户信息现已升级为“获取会员基础信息”,点击查看文档。其中button属性中的onGetAuthorize在uniapp中书写为@getAuthorize,即可成功编译。
原因:JSON.parse()
使用时参数传入了object类型而不是string类型的数据,导致了报错。
因为返回的data为object类型,去掉JSON.parse()
后,代码运行正常;不久后这里又开始报错,发现返回的数据又变为string类型。于是补充逻辑:判断返回数据为string类型时,再JSON.parse()
一下。
因为JSON.parse()
传入参数类型不为string的错误有多处,鉴于平台差异,最好在使用时都判断一下类型。
原因:百度小程序不支持将getImageInfo获取到的本地路径作为previewImage的图片列表参数。
解决:使用previewImage时,用网络图。
原因:百度的getImageInfo返回的数据中没有errMsg字段。
由于之前判断图片保存成功的方式是res.errMsg === 'getImageInfo:ok’
,导致了错误。
解决:百度、支付宝小程序用其它字段(path)判断图片保存状态。
当用xxxList.length
作为插值时,
对xxxList做长度减少的操作,页面更新正常;
对xxxList做长度增加的操作,页面不更新。
解决:额外定义一个变量来代替xxxList.length
作为插值。
选中元素可以看到v-show已经编译成了支付宝支持的hidden=true
,其它小程序也出现过v-show失效的情况,所以不推荐在uniapp中使用v-show。
解决:改为v-if。
解决:用uniapp时,不同组件中的同名样式类名在支付宝会互相干扰,需要在style标签中加上scoped、修改类名。
支付宝小程序还需要一些样式重置:
/* #ifdef MP-ALIPAY */
button{
border: none;
}
input{
background: transparent;
}
/* #endif */
解决:添加id。canvas 组件的标识是 id,而不是 canvas-id。
原因:uni.uploadFile在且仅在支付宝小程序上有个一必填字段fileType。
原因:对比其它小程序,发现支付宝小程序请求参数中有汉字,而其它小程序会自动将汉字进行编码。用encodeURIComponent手动编码之后解决。
原因:其它平台通过uni.getSystemInfoSync()
获取到的screenWidth、screenHeight的值均为css像素,但在手机上的支付宝小程序获取到的值为物理像素。
解决:在支付宝平台上,当获取到的screenWidth>500
时,取screenWidth/pixelRatio
的值使用。
原因:支付宝用chooseImage()获取到的数据中没有tempFiles字段,只有tempFilePaths字段。
解决:
原有保存逻辑:uni.getImageInfo-> uni.saveImageToPhotosAlbum。
支付宝作区分:uni.saveImageToPhotosAlbum。
因为saveImageToPhotosAlbum接口不支持网络图片路径,所以原有的保存逻辑中,需要先用getImageInfo来获取一个本地路径再保存。而uni.saveImageToPhotosAlbum
编译成支付宝小程序代码后是my.saveImage
,这个接口对图片路径是没有要求的,所以当运行平台为支付宝时可以省去uni.getImageInfo
这步。
原因:
(1)支付宝画布导出图片的接口不是uni.canvasToTempFilePath(),而是CanvasContext.toTempFilePath(),并且取apFilePath的值。
平台差异说明。
(2)其它小程序在某个页面获取的临时路径,在关闭该页面后不会失效。而夸克、uc通过toTempFilePath获取到的临时路径(apFilePath),在获取页面关闭后会失效。
解决:
(1)将使用某临时路径的业务放在获取该路径的当前或之后的页面中。
(2)将获取临时路径的逻辑放在组件中,并在相应页面引入使用。
解决:延时跳转。
原因:开发工具不明原因的没有了权限。
解决:
(1)使用root权限打开应用程序。(但是过于麻烦。)
(2)因为每次用npm运行项目都需要sudo来执行,怀疑node安装到了一个权限太高的地方,通过nvm重新安装一次node之后解决。
原因:在下载证书并在描述文件中启用证书后,还需要在设置→通用→关于本机→证书信任设置里面启用完全信任Charles证书。
持续更新地址