- iOS13下,小程序在输入框内,无法定位光标
小程序的输入框内,无法点击->拖动->释放, 定位光标位置, 在我们自己的小程序(天天跟我买)和微信指数上都是, 微信原生的输入框没有问题.
2019-09-27 - 客户端6.7.3 iOS端 小程序transition动画异常
- 当前 Bug 的表现(可附上截图) css中的transition动画播放异常 时有时无 - 预期表现 css中的transition动画正常播放 - 复现路径 - 提供一个最简复现 Demo
2018-10-18 - ios12 css transform 动画不执行
ios12 css transform 动画不执行。Android执行没有问题,ios11的版本执行也没有问题 -webkit-transition: all 350ms; transition: all 350ms; -webkit-transform: translateX(400rpx); transform: translateX(400rpx);
2018-10-13 - 希望提供获取小程序内存使用情况的API,以简化内存相关异常的排查流程
- 需求的场景描述(希望解决的问题) 有一些用户跟我们反馈小程序黑屏和闪退问题,我们首先怀疑是内存消耗异常导致的。找用户帮忙测试了,在确认手机可用内存大于2G的情况下测试(我们的小程序内存正常使用范围在200M~500M之间),仍然有问题,于是进一步怀疑小程序在用户的手机上内存消耗存在异常(消耗了过大的内存),然后为了确认,我们需要给用户开通开发版权限,然后教用户怎么打开“性能监控面板”,再教用户怎么录屏…… 我们的用户年龄偏大,对手机的使用不像年轻人那么熟练,学习成本非常高,尽管很多用户很友好很有耐心配合我们,但是花的时间太长,对我们和用户都是一个不小的负担。如果有API能够直接获取内存使用情况,我们直接代码里监控就行了,顶多让用户提交一下意见反馈把日志上传上来。 - 希望提供的能力 希望提供一个API,能够获取到小程序当前的内存(RAM)使用情况,以便于我们分析定位黑屏、闪退问题是否和内存有关。 只要安卓系统有这个接口可用就行,目前我们出问题的主要是安卓机。
2019-07-29 - 客服消息推送接口频繁报45047错误但客户一周内只发过一两次消息
客户在小程序客服窗口发送消息,小程序会调用后端接口,由后端应用调用微信客服消息推送接口返回固定的内容.但是从4月1号起后端调用客服消息回复接口时长失败,返回信息: errCode:45047 errMsg=out of response count limit hint. 查看相关资料,说是客户发过一条消息后,在下一次客户发消息前,最多只能回复20次,但是我们的逻辑是一问一答,只会自动回复一下,而大部分客户在七天之内都只发过最多一两次消息,这个到底是什么原因呢? 看到后台接口调用返回那么多这个错误,表示客户在客服窗口发送消息后,没有收到任何回应,相当着急!希望官方能给出解决方法.
2019-04-04 - 通过环境变量指定云环境问题
[图片] 这种写法没法指定云环境吗? process.env.SCF_NAMESPACE 是云环境id,如果直接换成云环境id,就可以指定云环境 下面这种写法是ok的 [图片]
2019-07-15 - ios调用wx.stopDeviceMotionListening()失败
- 当前 Bug 的表现(可附上截图) [图片] [图片] [图片] [图片] - 预期表现 正常停止 - 复现路径 - 提供一个最简复现 Demo
2019-03-19 - 云函数测试成功,前端调用成功却返回空,数据库也有数据,求解
- 当前 Bug 的表现(可附上截图) [图片][图片] [图片] - 预期表现[图片] - 复现路径 。 - 提供一个最简复现 Demo [代码]var[代码] [代码]app = getApp()[代码][代码]Page({[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 页面的初始数据[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]movieDetail: {[代码][代码] [代码][代码]mid: 1,[代码][代码] [代码][代码]title: [代码][代码]"绿皮书"[代码][代码],[代码][代码] [代码][代码]movieClass: [代码][代码]"剧情/喜剧/传记"[代码][代码],[代码][代码] [代码][代码]actor: [代码][代码]"维果·莫里森,马赫莎拉·阿里"[代码][代码],[代码][代码] [代码][代码]score: [代码][代码]"9.6分"[代码][代码],[代码][代码] [代码][代码]onShowTime: [代码][代码]"2019-2-26"[代码][代码],[代码][代码] [代码][代码]country: [代码][代码]"美国"[代码][代码],[代码][代码] [代码][代码]introduce: [代码][代码]" 一名黑人钢琴家,为前往种族歧视严重的南方巡演,找了一个粗暴的白人混混做司机。在一路开车南下的过程中,截然不同的两人矛盾不断,引发了不少争吵和笑料。但又在彼此最需要的时候,一起共渡难关。行程临近结束,两人也慢慢放下了偏见......绿皮书,是一本专为黑人而设的旅行指南, 标注了各城市中允许黑人进入的旅店、 餐馆。 电影由真实故事改编。 "[代码][代码],[代码][代码] [代码][代码]willingToWatch: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]scored: [代码][代码]false[代码][代码],[代码][代码] [代码][代码]},[代码][代码] [代码][代码]willingToWatch: [代码][代码]false[代码][代码],[代码][代码] [代码][代码]scored: [代码][代码]false[代码][代码],[代码][代码] [代码][代码]isFold: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]starPath: [代码][代码]'../../images/score.png'[代码][代码],[代码][代码] [代码][代码]staredPath: [代码][代码]'../../images/scored.png'[代码][代码],[代码] [代码] [代码][代码]actor: [{[代码][代码] [代码][代码]profile: [代码][代码]"../../images/actor1.webp"[代码][代码],[代码][代码] [代码][代码]name: [代码][代码]"彼得·法雷里"[代码][代码],[代码][代码] [代码][代码]role: [代码][代码]"导演"[代码][代码] [代码][代码]},[代码][代码] [代码][代码]{[代码][代码] [代码][代码]profile: [代码][代码]"../../images/actor2.webp"[代码][代码],[代码][代码] [代码][代码]name: [代码][代码]"维果·莫腾森"[代码][代码],[代码][代码] [代码][代码]role: [代码][代码]"托尼·利普"[代码][代码] [代码][代码]},[代码][代码] [代码][代码]{[代码][代码] [代码][代码]profile: [代码][代码]"../../images/actor3.webp"[代码][代码],[代码][代码] [代码][代码]name: [代码][代码]"马赫沙拉·阿里"[代码][代码],[代码][代码] [代码][代码]role: [代码][代码]"唐·雪利"[代码][代码] [代码][代码]},[代码][代码] [代码][代码]{[代码][代码] [代码][代码]profile: [代码][代码]"../../images/actor4.webp"[代码][代码],[代码][代码] [代码][代码]name: [代码][代码]"琳达·卡德里尼"[代码][代码],[代码][代码] [代码][代码]role: [代码][代码]"德洛瑞丝"[代码][代码] [代码][代码]}[代码][代码] [代码][代码]],[代码][代码] [代码][代码]comments: [{[代码][代码] [代码][代码]uid: [代码][代码]'123512313'[代码][代码],[代码][代码] [代码][代码]userName: [代码][代码]'LWRNL'[代码][代码],[代码][代码] [代码][代码]userProfile: [代码][代码]"../../images/user.png"[代码][代码],[代码][代码] [代码][代码]userComment: [代码][代码]"真·青春成长题材,教师视觉展现上世纪80年代拘谨的校园教育氛围,幽默不俗、叛逆放纵,残酷真实,笑中伤感,唯有以梦落幕。每个人都想做最完美的自己,可惜追求完美需要承受巨大压力,当醒悟后才懂得只需找准自己的。"[代码][代码],[代码][代码] [代码][代码]commentDate: [代码][代码]"4天前"[代码][代码],[代码][代码] [代码][代码]score: 5[代码] [代码] [代码][代码]},[代码][代码] [代码][代码]{[代码][代码] [代码][代码]uid: [代码][代码]'123512313'[代码][代码],[代码][代码] [代码][代码]userName: [代码][代码]'LWRNL'[代码][代码],[代码][代码] [代码][代码]userProfile: [代码][代码]"../../images/user.png"[代码][代码],[代码][代码] [代码][代码]userComment: [代码][代码]"真·青春成长题材,教师视觉展现上世纪80年代拘谨的校园教育氛围,幽默不俗、叛逆放纵,残酷真实,笑中伤感,唯有以梦落幕。每个人都想做最完美的自己,可惜追求完美需要承受巨大压力,当醒悟后才懂得只需找准自己的。"[代码][代码],[代码][代码] [代码][代码]commentDate: [代码][代码]"4天前"[代码][代码],[代码][代码] [代码][代码]score: 4[代码] [代码] [代码][代码]},[代码][代码] [代码][代码]{[代码][代码] [代码][代码]uid: [代码][代码]'123512313'[代码][代码],[代码][代码] [代码][代码]userName: [代码][代码]'LWRNL'[代码][代码],[代码][代码] [代码][代码]userProfile: [代码][代码]"../../images/user.png"[代码][代码],[代码][代码] [代码][代码]userComment: [代码][代码]"真·青春成长题材,教师视觉展现上世纪80年代拘谨的校园教育氛围,幽默不俗、叛逆放纵,残酷真实,笑中伤感,唯有以梦落幕。每个人都想做最完美的自己,可惜追求完美需要承受巨大压力,当醒悟后才懂得只需找准自己的。"[代码][代码],[代码][代码] [代码][代码]commentDate: [代码][代码]"4天前"[代码][代码],[代码][代码] [代码][代码]score: 2[代码] [代码] [代码][代码]},[代码][代码] [代码][代码]{[代码][代码] [代码][代码]uid: [代码][代码]'123512313'[代码][代码],[代码][代码] [代码][代码]userName: [代码][代码]'LWRNL'[代码][代码],[代码][代码] [代码][代码]userProfile: [代码][代码]"../../images/user.png"[代码][代码],[代码][代码] [代码][代码]userComment: [代码][代码]"真·青春成长题材,教师视觉展现上世纪80年代拘谨的校园教育氛围,幽默不俗、叛逆放纵,残酷真实,笑中伤感,唯有以梦落幕。每个人都想做最完美的自己,可惜追求完美需要承受巨大压力,当醒悟后才懂得只需找准自己的。"[代码][代码],[代码][代码] [代码][代码]commentDate: [代码][代码]"4天前"[代码][代码],[代码][代码] [代码][代码]score: 5[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]][代码] [代码] [代码][代码]},[代码][代码] [代码][代码]showAll: [代码][代码]function[代码][代码](e) {[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]isFold: ![代码][代码]this[代码][代码].data.isFold,[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]willToWatch: [代码][代码]function[代码][代码]() {[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]willingToWatch: [代码][代码]true[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]scored: [代码][代码]function[代码][代码]() {[代码][代码] [代码][代码]wx.navigateTo({[代码][代码] [代码][代码]url: [代码][代码]"../evaluate/evaluate?mid="[代码] [代码]+ [代码][代码]this[代码][代码].data.mid[代码][代码] [代码][代码]})[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]scored: [代码][代码]true[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]shortcomment: [代码][代码]function[代码][代码]() {[代码][代码] [代码][代码]wx.navigateTo({[代码][代码] [代码][代码]url: [代码][代码]"../evaluate/evaluate?mid="[代码] [代码]+ [代码][代码]this[代码][代码].data.mid[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]/**[代码][代码] [代码][代码]* 生命周期函数--监听页面加载[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onLoad: [代码][代码]function[代码][代码](options) {[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]mid: options.mid,[代码][代码] [代码][代码]uid: app.globalData.openid,[代码][代码] [代码][代码]})[代码][代码] [代码][代码]console.log([代码][代码]this[代码][代码].data.mid + [代码][代码]'..'[代码] [代码]+ [代码][代码]this[代码][代码].data.uid)[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 生命周期函数--监听页面初次渲染完成[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onReady: [代码][代码]function[代码][代码](e) {[代码] [代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 生命周期函数--监听页面显示[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onShow: [代码][代码]function[代码][代码]() {[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]scored: [代码][代码]this[代码][代码].data.movieDetail.scored,[代码][代码] [代码][代码]willingToWatch: [代码][代码]this[代码][代码].data.movieDetail.willingToWatch,[代码][代码] [代码][代码]})[代码] [代码] [代码][代码]wx.cloud.callFunction({[代码][代码] [代码][代码]name: [代码][代码]'getMovieDetails'[代码][代码],[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]uid: [代码][代码]this[代码][代码].data.uid,[代码][代码] [代码][代码]mid: [代码][代码]this[代码][代码].data.mid[代码][代码] [代码][代码]},[代码][代码] [代码][代码]success: res => {[代码][代码] [代码][代码]console.log([代码][代码]'收到结果: '[代码][代码], res.result.movieDetails)[代码] [代码] [代码][代码]this[代码][代码].setData({[代码] [代码] [代码][代码]})[代码] [代码] [代码][代码]},[代码][代码] [代码][代码]fail: err => {[代码][代码] [代码][代码]console.error([代码][代码]'[云函数] [getMyOrder] 调用失败'[代码][代码], err)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码] [代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 生命周期函数--监听页面隐藏[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onHide: [代码][代码]function[代码][代码]() {[代码] [代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 生命周期函数--监听页面卸载[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onUnload: [代码][代码]function[代码][代码]() {[代码] [代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 页面相关事件处理函数--监听用户下拉动作[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onPullDownRefresh: [代码][代码]function[代码][代码]() {[代码] [代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 页面上拉触底事件的处理函数[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onReachBottom: [代码][代码]function[代码][代码]() {[代码] [代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 用户点击右上角分享[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]onShareAppMessage: [代码][代码]function[代码][代码]() {[代码] [代码] [代码][代码]}[代码][代码]})[代码][代码][代码]云函数: [代码]const cloud = require([代码][代码]'wx-server-sdk'[代码][代码])[代码][代码]cloud.init()[代码][代码]const db = cloud.database()[代码][代码]const movieDetail = db.collection([代码][代码]'movieDetails'[代码][代码])[代码][代码]const willing = db.collection([代码][代码]'willings'[代码][代码])[代码][代码]const score = db.collection([代码][代码]'movieEvaluate'[代码][代码])[代码][代码]exports.main = async (event, context) =>{[代码][代码] [代码][代码]try[代码][代码]{[代码][代码] [代码][代码]//查询willing表中是否有对应数据,有则willingToWatch改为true,反之,willingToWatch改为false[代码][代码] [代码][代码]const exist1 = await willing.where({[代码][代码] [代码][代码]mid: event.mid,[代码][代码] [代码][代码]open_id: event.uid[代码][代码] [代码][代码]}).count()[代码][代码] [代码][代码]const total1 = exist1.total[代码][代码] [代码][代码]if[代码] [代码](total1 === 0) {[代码][代码] [代码][代码]await movieDetail.where({[代码][代码] [代码][代码]mid: event.mid[代码][代码] [代码][代码]}).limit(1)[代码][代码] [代码][代码].update({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]willingToWatch: [代码][代码]false[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]await movieDetail.where({[代码][代码] [代码][代码]mid: event.mid[代码][代码] [代码][代码]}).limit(1)[代码][代码] [代码][代码].update({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]willingToWatch: [代码][代码]true[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]////查询movieEvaluate表中是否有对应数据,有则scored改为true,反之,scored改为false[代码][代码] [代码][代码]const exist2 = await score.where({[代码][代码] [代码][代码]mid: event.mid,[代码][代码] [代码][代码]open_id: event.uid[代码][代码] [代码][代码]}).count()[代码][代码] [代码][代码]const total2 = exist2.total[代码][代码] [代码][代码]if[代码] [代码](total2 === 0) {[代码][代码] [代码][代码]await movieDetail.where({[代码][代码] [代码][代码]mid: event.mid[代码][代码] [代码][代码]}).limit(1)[代码][代码] [代码][代码].update({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]scored: [代码][代码]false[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]await movieDetail.where({[代码][代码] [代码][代码]mid: event.mid[代码][代码] [代码][代码]}).limit(1)[代码][代码] [代码][代码].update({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]scored: [代码][代码]true[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码]catch[代码][代码](e){[代码][代码] [代码][代码]console.error(e)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]//返回查询数据[代码][代码] [代码][代码]return[代码] [代码]{[代码][代码] [代码][代码]movieDetails: await movieDetail.where({[代码][代码] [代码][代码]mid: event.mid[代码][代码] [代码][代码]}).limit(1).get()[代码][代码] [代码][代码]}[代码][代码]}[代码]
2019-04-28 - 能否增加一个wxml绑定globalData的功能?
- 需求的场景描述(希望解决的问题) 使用 globalData 跨页面共享数据时,每次都要在页面的 data 中从 globalData 复制一份,而且更新页面数据时也要修改 globalData ,造成页面逻辑和全局的逻辑耦合。 如果 globalData 中的数据能直接绑定到 wxml ,那么也就相当于有了一个简易的 mobx ,让跨页面状态管理更加便捷,会极大的提高开发体验,这样就让程序员们更快的开发出 bug 更少的小程序,让小程序的推广更加迅速,让微信赚到更多钱,让腾讯的股票上升,然后腾讯就会给小程序的开发团队发更多的钱。 - 希望提供的能力 wxml 能够绑定 globalData ,这样就能将 globalData 作为一个全局的状态 store 来使用了。 wxml 中用 $global 来表示绑定 globalData 。getApp().setGlobalData({ prop: value }) 来设置 globalData ,触发页面更新,下面是我设想的代码示例: wxml [代码]<!-- index.wxml -->[代码][代码]<[代码][代码]view[代码][代码]>[代码][代码] [代码][代码]{{$global.name}}[代码][代码]</[代码][代码]view[代码][代码]>[代码] js [代码]/* action.js */[代码] import * as api from '../../api.js' // 修改名称 [代码]export const updateUsername = name =>[代码][代码] [代码][代码]api.updateUsername(name).then(({ statusCode }) => {[代码][代码] [代码][代码]getApp().setGlobalData({ name })[代码][代码] [代码][代码]})[代码][代码] [代码] [代码]// 获取名称[代码][代码]export const getUsername = () =>[代码][代码] [代码][代码]api.getUsername().then(({ data: { name } }) => {[代码][代码] [代码][代码]getApp().getGlobalData({ name })[代码][代码] [代码][代码]})[代码] [代码] [代码] 当然,为了少打几个字,不一定要 $global ,选个简短一点的 $g 也可以;getApp().setGlobalData 也可以用 getApp().setData() ,但是大致的功能设想就是以上了。
2018-12-26 - 小程序云开发 更新多个集合 事务
小程序云开发 我要同时更新多个集合的数据,怎么确保在一个事务中执行? 例如我支付回调时,我既要去更新订单的状态,也要更新支付订单的状态,怎么确保在一个事务中执行, 小程序云开发有提供这种能力吗,求大神告知
2018-09-28