参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发;期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的一些坑;下面针对小程序开发过程中遇到的一些坑跟大家分享,有些没有深究具体原因;

1、原生组件遮盖的问题

由于原生组件层级最高,即使设置了其z-index也于事无补;不能随意在其层级上展示信息,只能通过cover-viewcover-image组件(其实这两个组件也是原生组件)来进行遮盖;

例如,下图在map原生组件上遮盖层:上方banner、地图上的气泡指针以及右下角的归位。

另外需要注意一点,若要在覆盖原生组件上,还需要保证一点:

由于`cover-view`和`cover-image`也是原生组件,需要保证他们插入页面的时机晚于要覆盖的原生组件,即先要插入原生组件。

例如上图中,地图上的banner遮盖层若不是包含在map原生组件内,那么就需要在map出现后插入,否则map组件也会覆盖cover-veiw

2、不支持base64格式的图片问题

小程序有些图片是不支持base64格式的,例如cover-image,地图marker的iconPath等。在配合webpack构建小程序代码时需要注意不要对这些图片进行base64转换。

3、地图mapContext的问题

小程序打开AB两个页面,B页面由A页面navigateTo而来,A、B两个页面都有地图组件,并且两个页面都通过wx.createMapContext创建了地图的mapContext。

在小程序基础库2.3.0~2.6.2版本下产生一个问题:

B页面返回A页面,A页面地图的mapContext提供方法的回调都不会执行,在2.6.0版本下会每次调用mapContext的方法,都会在mapContext上生成一堆callback。

例如由B页面返回的A页面多次调用mapContext提供的方法,会在其上挂载callback,因为回调方法得不到执行,所以挂载其上的callback函数没法删除

4、onError捕获错误的问题

小程序通过App实例的onError方法来捕获小程序的异常信息,通过该方法能收集异常从而实现小程序的异常监控;

小程序的错误收集内部具体的实现:

  • 视图渲染层是通过window.onerror来捕获前端错误
  • 服务层是通过try-catch来捕获错误的

那么可以知道:

小程序对promise的unhandledrejection异常是无法捕获的,需要开发者自己catch promise抛出的异常;

5、ios10系统下flex:1的父元素,其子元素height:100%未充满父元素

小程序在ios10系统下,对于如下结构的模板:

<!-- 页面内容 -->
<template>
<view class="test">
<view class="test1">
<view class="child">haha</view>
</view>
<view class="test2"></view>
</view>
</template>
 .test
width: 100%
height: 100%
flex-direction: column
display: flex .test1
flex 1
width 100%
border 1px solid #000
.child
height 100%
background #fc9153
.test2
width 100%
height 226px
border 1px solid #eee

在ios10的设备下,其展示效果结果如下图所示:

可以看见,在ios10系统下,父元素view.test1的子元素view.child并未充满整个父元素,其实这个问题在web也出现过类似问题,如:

解决办法是父类容器设置position:relative; 子元素设置:position:absolute;width:100%,height:100%;

6、自定义组件用slot插入cover-view的问题

自定义组件使用slot嵌套cover-view 时,自定义组件的 slot 及其父节点暂不支持通过 wx:if 控制显隐,否则会导致 cover-view 不显示。例如:

<!-- ComponentA -->
<cover-view wx:if="{{ status === 'fail' }}">
<slot name="before"></slot>
<cover-view>{{ failDesc }}</cover-view>
<slot name="after"></slot>
</cover-view>
 <!-- PageA -->
<ComponentA>
<cover-image src="xxx.png" slot="before"/>
<cover-view slot="after">hellow word</cover-view>
</ComponentA>

上面自定义组件ComponentA因为使用了slot来嵌套cover-view,而其父节点使用了wx:if控制显隐,导致在真机环境slot的cover-image和cover-view内容不显示。

7、mapCtx.includePoints方法配置回调函数在2.6.4版本下不执行

小程序地图上下文方法MapContext.includePoints(Object object)配置的任何回调函数success、fail和complete均不执行,有人为此提出过类似问题this.mapCtx.includePoints回调无效

目前官方已经在>= 2.6.4版本修复了该问题,低于该版本仍然存在这个问题。

8、小程序订阅消息方法wx.requestSubscribeMessage

微信小程序消息推送模板改为订阅消息后,需要事先让用户进行消息订阅,代码层面是调用wx.requestSubscribeMessage方法,需要注意以下两点:

  • wx.requestSubscribeMessage方法只能在tap事件中触发
  • wx.requestSubscribeMessage方法只能在事件中同步调用

    否则会报requestSubscribeMessage:fail can only be invoked by user TAP gesture错误

微信小程序的坑(持续更新中)的更多相关文章

  1. 微信小程序练习笔记(更新中。。。)

    微信小程序练习笔记 微信小程序的练习笔记,用来整理思路的,文档持续更新中... 案例一:实现行的删除和增加操作  test.js // 当我们在特定方法中创建对象或者定义变量给与初始值的时候,它是局部 ...

  2. 微信小程序入门(持续更新)

    微信小程序的主要文件介绍: . js:脚本文件 .json:配置文件 .wxss:样式表文件 .wxml:页面 微信小程序差不多也是和mvc模式差不多的,采用数据和页面分离的模式,在js上写的数据可以 ...

  3. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  4. 微信小程序爬坑日记

    新公司上手小程序.30天,从入门到现在,还没放弃... 虽然小程序发布出来快一年了,爬坑的兄弟们大多把坑都踩平了.而我一直停留在"Hello World"的学习阶段.一来没项目,只 ...

  5. 两百条微信小程序跳坑指南(不定时更新)

    微信小程序联盟出品 跳坑textarea<二百二十三>不显示文本及textarea相关问题集合跳坑<二百一十三> background-image无法获取本地资源图片....跳 ...

  6. 使用wepy框架搭建微信小程序采坑记(一)

    1.什么是wepy 这个框架是腾讯内部出的一个类MVVM的小程序开发框架.大体上来说语法是类VUE的,所以如果有VUE开发经验的话迁移成本会低一些.至于具体的怎么使用我就不赘言了,有问题查文档(官方文 ...

  7. 微信小程序遇坑笔记

    最近做了一个简单的微信小程序,遇到了一些坑: 1.appid固定,但是appsecret是可以变的,而且没有地方查看,后台以查看就是变更了,所以这个地方在开发的时候需要保存好: 2.打开网页,这个网页 ...

  8. 微信小程序填坑之旅一(接入)

    一.小程序简介 小程序是什么? 首先“程序”这两个字我们不陌生.看看你手机上的各个软件,那就是程序.平时的程序是直接跑在我们原生的操作系统上面的.小程序是间接跑在原生系统上的.因为它嵌入在微信中,受微 ...

  9. 微信小程序入坑之自定义组件

    前言 最近接触微信小程序,再次之前公司用的前端框架是vue ,然后对比发现,开发小程序是各种限制,对于开发者非常不友好.各种槽点太多,完全吐槽不过来,所以在此不多说,打算下次专门写一篇文章吐槽一下.本 ...

随机推荐

  1. 【Web技术】399- 浅谈前端代码加密

    作者简介:于航,PayPal Senior Software Engineer,在 PayPal 上海负责 Global GRT 平台相关的技术研发工作.曾任职于阿里巴巴.Tapatalk 等企业.f ...

  2. Mac安装Ubuntu18.04双系统经验以及感悟

    1.扯一会 提到Mac很多人估计会觉得高大上,其实我也是这么认为的,因为我在13年之前用的不是Mac 而是普通的笔记本,总幻想着拥有一台Mac,当然了这个愿望在13年10月份左右就实现了 Mac最大的 ...

  3. Linux-部署-Django

    Linux-部署-Django-项目过程与问题总结 优才网 2017-04-12 18:00   本篇主要用于记录部署 Django 项目所有踩过的坑. 最近学习 Django 框架开发,将项目部署到 ...

  4. 【VUE】使用问题记录

    [VUE]使用问题记录 ===================================================================== 1.Vue.nextTick 修改数 ...

  5. Redis Cluster 的数据分片机制

    上一篇<分布式数据缓存中的一致性哈希算法> 文章中讲述了一致性哈希算法的基本原理和实现,今天就以 Redis Cluster 为例,详细讲解一下分布式数据缓存中的数据分片,上线下线时数据迁 ...

  6. C#线程学习笔记四:线程同步

    本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/21/ThreadsSynchronous.html,记录一下学习过程以备后续查用.     ...

  7. 集合框架关于<list接口><map接口>的运用

    集合: 集合就是一个容器,他可以存储对象,我们说集合就是一个可变的数组 集合框架特点 1.list和set集合同时实现了collection接口 2.set集合存储唯一,无序的对象. 3.list 存 ...

  8. Android 项目优化(六):项目开发时优化技巧总结

    在之前我们讲了很多能够优化 Android 开发项目质量的方案,这些方案更多的是从一些比较专精的方向切入的,阐述的是一些比较重要且独立的优化方案. 本文我们将总结一下在日常开发过程中我们能够使用的一些 ...

  9. idea之常用快捷键

    之前一直在使用eclipse,后来工作中慢慢开始使用idea了,这里总结一些idea的快捷键,方便以后查询使用. 一.查找相关快捷键 1.双击shift在项目的所有目录查找,就是你想看到你不想看到的和 ...

  10. 自学Java编程,如何混到一个7k薪资实习生的岗位

    现在Java软件开发的专业一直都是热门,有很多专业的学生,比如电子.机械.会计.土木等等专业由于专业本身没有更高的提升空间,所以现在的年轻人更加喜欢做一些科技前沿的工作,毕竟现在接触的都是电子产品.而 ...