这是我在写小程序过程中遇到的一些问题和经验,其中一些问题经常让人花很多时间去 debug,其中一些小经验用了很多时间才领悟得到,所以汇总在这里备忘。
"navigationStyle": "custom"
无效,所以自定义的菜单栏(或者叫导航栏)都位于胶囊按钮下方的位置,但手机端会和胶囊按钮位于同一水平;windowHeight
包括了 tabbar 的高度;screenWidth
、screenHeight
并不会是横屏时的尺寸,依然是竖屏的尺寸;safeArea
是在竖屏正方向下的安全区域;wx.chooseMedia
选择图片,取消选择时,手机端会报错提示 cancel
,但电脑端无 cancel
字样,即无法根据报错信息判断是否为用户取消选择;wx.chooseMedia
选择非原图时,图片可能会被压缩得过于模糊,所以安卓端建议开启原图选项,再使用 wx.compressImage
压缩图片;wx.chooseMedia
即使仅仅开启 compressed
选项,选择的图片依然是原图;wx.compressImage
时不支持 compressedWidth
、 compressedHeight
这两个参数,即修改图片尺寸,电脑端甚至 wx.canIUse("compressImage")
返回 false
;wx.canvasToTempFilePath
导出分辨率较大的图片,可能会出现导出的图片是黑色或透明或白色的情况,降低导出的分辨率可解决;wx.canvasToTempFilePath
如果设置了 destWidth
、destHeight
,生成的图片尺寸可能会在这个基础上再乘以电脑的 dpr,电脑端如果可以的话不要设置任何可选参数;wx.previewImage()
以 tempFilePath
预览本地图片时,会无法显示,因为电脑端本地图片的 tempFilePath
是 wxfile://
开头,不是 http://
开头;wxacommentplugin
;canvas.createImage()
时,可能会失败;new Date().toLocaleDateString()
,会被单纯地理解成 toString()
;ctx.scale()
和 ctx.rotate()
之后,最好习惯性地恢复回原样,ctx.save()
和 ctx.restore()
;base64url
;wx.login()
;wx.login()
一天的调用总次数不多于该小程序 pv 的两倍;background: linear-gradient()
在 @media (prefers-color-scheme: dark)
中不会生效,可以用 style
属性根据 theme
赋予不同的值;hover-class
需要放在 class
之后,在 wxss
文件中也要写在对应的 class
之后,如果 hover-class
的样式写在一个单独的 wxss
文件中,页面的 wxss
应该在最后 @import
这个单独的 wxss
文件;<picker-view />
组件的蒙层在深色主题下显示有点丑,所以我喜欢隐藏这个蒙层,方法是给 picker-view
增加 mask-class
属性,然后其样式使用 background-image: none
,然后 indicator-class
增加一个背景色,同时把 z-index
设为 0;Component()
和 Page()
函数都是构造函数,每次打开页面都会被 new
一次,所以页面构造函数内部的值会被重置;let
或 var
声名变量,除非你故意利用它不会被重置的特点;wx.getNetworkType
在有系统代理的情况下把网络关闭依然显示 wifi 的情况;hover-stop-propagation
通常用在 view
组件,根据文档这个属性是 view
才有的属性,用在其他组件可能无效,例如用在 image
组件就无效;wx.navigate()
的 success
回调迟于目标页面的 onLoad
,所以目标页面如果需要通过 eventChannel
获取来源页面的数据时,要等多一会;<text>
组件开启 user-select
之后,部分安卓手机选择文字之后没有复制、全选两个按钮,解决方法:取消 <text>
父元素的 padding;wx.saveFile()
用来把临时文件保存为缓存文件或者用户文件,保存到 wx.env.USER_DATA_PATH
目录才是用户文件,如果不指定保存目录就是缓存文件。缓存文件使用 removeSavedFile
删除,而用户文件则使用 unlink
删除。如果使用 unlink
删除缓存文件会提示没有权限;onShareAppMessage
返回的 path
必须是以 /
开头的完整路径,如果不是以 /
开头,分享卡片可能不会显示页面截图,而是显示空白;