第七穿插连第XXXX名士兵

记录学习的点滴,成长的历程。

导航

微信小程序 - 开发问题收集(1)

1、小程序在PC端运行(PC端微信打开小程序)时,wx.request method为DELETE时请求报400,后端接收不到参数

说明:小程序在手机端(不管是安卓还是IOS)和开发工具内调试时功能均正常,但当PC端微信打开小程序时就会报错,后端接收不到参数, 一度怀疑PC端 wx.request 不支持delete。

   因为在PC端抓包时发现前端传入的参数丢失了,body或query都是空的body或query都是空的那后端肯定拿不到参数,因此报错。

原因:官方给出的解答是,delete不支持data传参,需要将参数放到url后面(和get一样,将参数添加到url后面)。

   注:这里面就有个问题,那为啥同样的写法(data传参),开发工具内和手机端就一切正常,而到了PC端却说delete不支持data传参,是不是有毛病。

处理方式:①、让后端把 delete 改成 post,这估计也是大多数的处理方式;②、根据官方解答的,将参数放到url后面(和get方式一样,将参数添加到url后面)

 

2、微信小程序页面onShow 和 app.js onShow的执行顺序

 

3、微信小程序嵌套页面跳转中刷新或清除缓存页面(防止页面过多造成的卡死)

微信小程序路由跳转有5个方法,分别是:wx.switchTab(Object object)wx.reLaunch(Object object)wx.redirectTo(Object object)wx.navigateTo(Object object)wx.navigateBack(Object object)

说明:微信小程序页面栈(页面缓存),最多10层。即页面调用时保留当前页面,跳转到应用内的某个页面。

   但有时候页面navigateTo到另一个页面,再一直navigateTo下去,页面套页面,如此循环套下去很快就会超过10层,这时小程序就会卡死,整个小程序无法使用。

原因:页面navigateTo到另一个页面,另一个页面再navigateTo到下一个页面,一直navigateTo下去,页面套页面,循环套下去致使小程序内的页面栈超过10层,从而使得小程序卡死,整个小程序无法使用。

处理方式:

 

4、底部的可交互组件如果渲染在iPhone X的安全区域外,容易误触Home Indicator

说明:在进行微信小程序的体验评分测试时,"体验"大项里面有一个小项"固定底部的可点击组件都在iPhone X安全区域内"

原因:1、部分组件或者页面功能在开发时没考虑到 iPhone X 以后系列苹果手机屏幕下方的横条(Home Indicator),未预留安全距离,从而使得小程序在实际使用中容易点到(Home Indicator),导致退出小程序;

   2、组件库部分组件需要另外设置属性,传参才会生效。这样就比较烦了,为啥不统一设置呢,非要整个属性传参才能生效。

处理方式①、直接在page标签内设置样式

page {
    background-color: #f9fafc;
    overflow-y: scroll;
    -webkit-overflow-scrolling: touch;
    /* iphoneX以上会多出一部分home indicator区域 */
    padding-bottom: constant(safe-area-inset-bottom);
    padding-bottom: env(safe-area-inset-bottom);
}

  ②、直接覆盖组件样式,在该组件的全局样式上进行设置

.van-picker__columns,
.van-picker__column,
.van-picker-column__item {
    padding-bottom: constant(safe-area-inset-bottom);
    padding-bottom: env(safe-area-inset-bottom);
}

 

5、存在使用 css ':active' 伪类来实现点击态

说明:在进行微信小程序的体验评分测试时,"体验"大项里面有一个小项"存在使用 css ':active' 伪类来实现点击态"。

 

6、自定义tabbar切换时会闪烁

说明:微信小程序在自定义下方的tabbar后,每次在切换tab时,tabbar的图标都会闪烁抖动,设置激活索引时也会出现不同步的情况。

原因:自定义下方的tabbar后,由于每个页面都需要加载tabbar组件,相当于每个页面都需要重新渲染该组件,因此每次在重新渲染时,由于组件的图标是图片

 

7、为什么wx.hideShareMenu()无法隐藏右上角按钮

说明:官方功能描述该接口是"隐藏当前页面的转发按钮",但实际在开发中经常会误会,以为调用了该方法就可以隐藏小程序又上角的,结果是折腾了半天,发现这玩意没得用,就开始吐槽官方,但实际上并非如此。

原因:因为我们理解错了,调用该方法后,并不是直接隐藏这两个按钮,而是对点击"..."后弹窗里面的内容加以了限制。具体可以禁用那些按钮,可以参看官方文档

// 禁用转发按钮和分享给朋友按钮
wx.hideShareMenu({
    menus: ['shareAppMessage', 'shareTimeline']
})

  

注:该方法不是全局方法,不是说在 app.js的onLaunch或者onShow内调用一次该方法后就禁用了所有页面弹窗内的这些按钮,而是每个页面都需要单独调用(一般在页面的onLoad方法内调用)。

另:与 wx.hideShareMenu() 相对的 wx.showShareMenu()方法,用于显示转发、分享按钮。

 

8、wx.showShareMenu()wx.hideShareMenu()相关的wx.onCopyUrl()

说明:虽然 wx.hideShareMenu()方法隐藏或禁用了转发按钮和分享给朋友按钮,但还有一个"复制链接"按钮也可分享页面链接啥的(此按钮,虽然文档上说暂只支持安卓,IOS不支持,但根据目前调试而言,IOS也是支持的,估计文档未同步更新)。

   然而 wx.hideShareMenu()方法又不隐藏和禁用"复制链接"按钮,那咋玩呢,就只能让它功能失效,无法复制到正确的页面链接,这样就算点击了"复制链接"也无济于事。

// 修改复制链接按钮返回的数据,使其不能将正确的页面链接复制出去
wx.onCopyUrl(() => {
    setTimeout(() => {
        // 设置系统剪贴板的内容,替换已经复制到的内容
        wx.setClipboardData({
            data: '暂不支持该页面链接分享',
            success(res) {
                wx.hideToast()
            }
        })
    }, 200)
    return {
        query: 'a=1&b=2'
    }
})

而且还有个比较意外的点,页面在调用了wx.hideShareMenu()方法后,如左图所示的"复制链接"按钮是禁用的,这应该是wx.hideShareMenu()方法的功劳,但文档上啥都没提。

 

9、

 

posted on 2023-01-09 18:05  第七穿插连第XX名士兵  阅读(157)  评论(0编辑  收藏  举报