小程序

采坑记

Posted by pxf on February 12, 2018

小程序

一:小程序的特点

小程序是一种不需要下载、安装即可使用的应用,它出现了触手可及的梦想,用户扫一扫或者搜一下即开打开应用,也出现了用完即走的理念,用户不用关心安装太多应用的问题,应用随处可用,但又无须安装卸载。

  • 1:无需下载:我们直接使用它,所以无须安装是小程序最基础的一个特性;
  • 2:触手可及:当我们拿着智能手机接触周边的时候,我们可以通过手机直接获得信息,就是周边的信息;
  • 3:用完即走:对于周边要完成的任务来说我们需要的是用完即走;
  • 4:无须卸载:小程序看起来是程序,但是它以完全不同于过去APP的形状出现,它有更灵活的应用组织形态;

二:微信小程序官方文档地址

三:如何学习微信小程序

四:小程序的跳坑指南

一、 小程序常见FAQ

二、开发微信小程序遇到的坑

  • 1、wxml内不能执行方法,只能处理简单的运算如 “+ - * /”,比如遇到遍历list,每个item的金额需要格式化,只能在js里预先格式化好再setData一遍
  • 2、只能通过setData()更新视图 关于 setData 假如你想在 this.setData 的 key 中传入变量,下述写法报错:
    triggerSelected (e) {
    var dataset = e.target.dataset;
    var id = dataset.id;
    var name = dataset.name;
    var type = dataset.type;
    this.setData({
        selected[type]: {
            id: id,
            name: name
        }
    });
    }
    

    且 this.setData 不支持模板字符串形式的 key,下述写法也报错:

triggerSelected (e) {
    var dataset = e.target.dataset;
    var id = dataset.id;
    var name = dataset.name;
    var type = dataset.type;
    this.setData({
        `selected.${type}`: {
            id: id,
            name: name
        }
    });
}

可将 selected 存入变量,直接操作 selected 变量后再 this.setData:

triggerSelected (e) {
    var dataset = e.target.dataset;
    var id = dataset.id;
    var name = dataset.name;
    var type = dataset.type;
    var selected = this.data.selected;
    selected[type] = {
        id: id,
        name: name
    };
    this.setData({
        selected: selected
    });
}
  • 3、我们规定页面路径只能是五层,请尽量避免多层级的交互方式。
  • 4、遇到奇怪的问题(如样式等)先重启工具
  • 5、wx.setStorage(OBJECT) 【目前每个小程序限制5M】
  • 6、view 添加点击效果[需要开启hover效果]: ` `
  • 7、后台不能接受POST数据,但是可以接收GET请求参数
    url: url,
    data: data,
    method: "POST",
    dataType: "json",
    header: {
	// 此处若为application/json则服务端无法获取POST的参数
      'content-type': 'application/x-www-form-urlencoded' 
    }

  • 8、当调用小程序 wx.getUserInfo(OBJECT) 获取用户基本信息时,需要用户进行授权操作,如果用户点击了拒绝,则再次调用该方法就不会出现对应的授权窗口。只能通过wx.openSetting(OBJECT)调起客户端小程序设置界面,让用户打开允许授权的开关,返回用户设置的操作结果后重新授权。
  • 9、 微信后台更新了request合法域名,可以直接去微信开发工具–>工具–>刷新,立马生效。
  • 10、 小程序官方没有提供java版登录信息解密示例,可以用这个demo java版解密demo
  • 11、微信小程序的rpx会出现精度问题 设置margin-left/margin-right负值,可能导致页面能够左右晃动。 猜测 是rpx导致的精度问题。 1rpx = (设备宽度 / 750) px

rpx本质上会转换为px,在不同宽度的设备上,实际的rpx值会转换为带小数的px值,四舍五入可能出现问题,rpx转换在iPhone6上匹配准,所以设计稿建议用iphone6尺寸。

  • 12.wx.request表现不合理,并且携带特殊字符会报错 请求返回404错误,也会触发success回调。 不要想当然的认为会触发fail回调,判断一个请求成功或失败,请使用wx.request返回的状态来判断。只有不符合规范的请求,才会触发fail。
  • 13.不要给Page.data传入太多无用数据,会影响渲染效率,在iOS上表现特别明显尽量传入精简的数据,保持Page.data和view间简单的绑定关系即可。
  • 14.微信小程序开发问题-ios的Date问题 开发小程序过程中,发现后台默认返回的 “2017-11-11 11:11:11”;格式不支持会直接返回null,ios要这种格式:”2014-09-25T13:24:00”,因为要计算时间差getTime(),所以对于返回null需要兼容. 解:

1.方法转化

strToDate(dateObj){
      dateObj = dateObj.replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '').replace(/(-)/g, '/')
      dateObj = dateObj.slice(0, dateObj.indexOf("."))
     return new Date(dateObj)
    }

2.方法2

safari兼容写法

var safariTime =  new Date(myTime.substr(0,10)+"T"+myTime.substr(11,8));
  • 15.小程序的Toast都必须带有Icon,要实现只有文字的Toast只能自定义。
  • 16.关于

渲染时不会将 nodes 解析为常规标签,你只能拿到这样一大坨:

无法直接获取其中的 dom,且不可在 .wxss 中定义其样式故必须添加内联 style。

无法对 nodes 自动纠错:例如部分浏览器可解析 一段错误代码 则直接过滤错误代码不进行渲染。

  • 17.css垂直居中 (1)行内块垂直居中(浏览器解析差异大,不见使用 flex布局)
    {
      display:inline-block;
      vertical-align:middle;
    }
    

    (2)行高控制(保险) (3)定位控制(保险) 1)高度未知

    .gm-vertical-center{
      top:50%;
      transform:translate(0,50%);
    }
    

    2)高度已知

    {
      top:50%;
      margin-top:-(高度/2)px
    }
    

五、总结小程序的那些限制:

image

颜色限制

  1. navigationBarTextStyle 导航栏标题颜色仅支持 black/white
  2. backgroundTextStyle 下拉背景字体、loading 图的样式,仅支持 dark/light
  3. borderStyle tabbar上边框的颜色, 仅支持 black/white

程序限制

  1. 脚本内不能使用window等对象
  2. zepto/jquery 会使用到window对象和document对象,所以无法使用。
  3. 样式表不支持级联选择器
  4. 本地资源无法通过 css 获取 background-image:可以使用网络图片,或者 base64,或者使用<image/>标签
  5. 不支持 A 标签,无法打开普通网页
  6. 并发request请求不能超过5个;
  7. 绑定开发者人数、体验者人数也有限制;
  8. 请求里合法域名有个数限制;
  9. 页面内跳转不能超过5级;
  10. 不支持跳转外部链接
  11. 目前不支持识别图中二维码,
  12. 背景图片不能用本地图片,

数量限制

  1. 底部或顶部可以添加tab按钮区域 tabBar 是一个数组,只能配置最少2个、最多5个 tabtab 按数组的顺序排序。
  2. 一个应用同时只能打开5个页面

大小限制

  1. tabBar 上面的按钮 iconPath 图片路径,icon 大小限制为40kb
  2. tabBar 上面的按钮 selectedIconPath 选中时的图片路径,icon 大小限制为40kb
  3. setData 页面传递数据单次设置的数据不能超过1024kB
  4. setStorage 本地缓存最大为10MB
  5. 小程序源码打包后的大小限制为1M

消息限制

  1. 支付当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发1条,多次支付下发条数独立,互相不影响)
  2. 提交表单 当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)