- 微信开放平台希望增加测试号绑定上限?
一:问题描述 开放平台绑定测试号按钮变成灰色点击该按钮后跳转到 about:blank 空白页[图片] 二:问题成因分析 页面代码里有这么一段,看逻辑理解应该是「测试用的沙箱号数量超过上限」的意思。 [图片] 三:问题建议 由于我们公司开发人员众多,维护单一的沙箱测试号对本地测试非常不友好,例如若要更换 JS 安全域名,则需要测试号拥有者修改,对拥有者造成的打扰巨大。
2022-08-18 - backgroundAudioManager在部分机型上onEnded触发2次
操作流程: 播放第一个音频之后,触发onEnded钩子自动执行「下一首」播放 [代码]onEnded() {[代码][代码] [代码][代码]console.log([代码][代码]'停止播放'[代码][代码]);[代码][代码] [代码][代码]self.page.setData({[代码][代码] [代码][代码]paused: [代码][代码]true[代码][代码] [代码][代码]});[代码][代码] [代码][代码]// 仅仅在已购买的情况下才会自动播放[代码][代码] [代码][代码]if[代码] [代码](self.page.data.hasBuy) {[代码][代码] [代码][代码]self.page.handlePlayNextAudioClick();[代码][代码] [代码][代码]}[代码][代码]},[代码] 表现: onEnded触发一次。 实际结果: 「第一首」播放完毕后,onEnded触发两次,如图可见“停止播放”输出了两次,直接开始播放「第三首」而不是第二首。 [图片]
2018-03-06 - iOS键盘扩展时input组件自动blur
Bug:iOS键盘扩展时input组件自动blur * 复现:在input框当中输入内容,点击iOS键盘右上角扩展选项(红色圈部分),自动展开 [图片] 展开内容后,轻轻滑动屏幕 [图片] 预期表现:展现更多字符 实际表现:input输入框自动Blur,键盘随之收起。 [图片] 复现设备: iPhone 6,iOS 9.3.1,微信版本6.6.1 上面的示例为用户设备,暂未确定系统 另一台Vivo测试机似乎没有问题
2018-01-19 - 视频videoContext play方法在安卓上无效
使用wx.createVideoContext创建ctx对象,点击按钮执行ctx.play()方法,在iOS可以触发播放,在安卓上则不行。 以及,在调试工具中输出ctx对象,发现原型链上没有ctx方法。 另外,亲测: wx.createVideoContext的构造时机没问题,在onReady和在onLoad中构造都一样 视频本身没有问题,在浏览器中可以访问。 基础库版本1.7.0,微信版本6.5.22,不会是版本过低的问题。 把video-compnent的hidden改为false,也不会解决问题。 以及,重点是:上上周这样的写法是没有问题的。。。这周就不行了 wxml: [代码]<[代码][代码]view[代码] [代码]class[代码][代码]=[代码][代码]"section tc"[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]view[代码] [代码]class[代码][代码]=[代码][代码]"video-item"[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]view[代码][代码] [代码][代码]data-id[代码][代码]=[代码][代码]"{{ video.id }}"[代码][代码] [代码][代码]catchtap[代码][代码]=[代码][代码]"handleTap"[代码][代码] [代码][代码]class[代码][代码]=[代码][代码]"video-item-discover"[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]image[代码] [代码]class[代码][代码]=[代码][代码]"video-item-discover-bg"[代码] [代码]src[代码][代码]=[代码][代码]"{{ video.preview_pic_url }}"[代码] [代码]/>[代码][代码] [代码][代码]<[代码][代码]image[代码] [代码]class[代码][代码]=[代码][代码]"video-item-btn"[代码] [代码]src[代码][代码]=[代码][代码]"/images/write-question/ic-reload@3x.png"[代码] [代码]/>[代码][代码] [代码][代码]view[代码][代码]>[代码][代码][代码][代码][代码][代码] [代码][代码][代码][代码][代码][代码][代码][代码] [代码][代码]<[代码][代码]view[代码] [代码]class[代码][代码]=[代码][代码]"video-component"[代码] [代码]hidden[代码][代码]=[代码][代码]"{{ true }}"[代码][代码]>[代码][代码][代码][代码][代码][代码] [代码][代码]<[代码][代码]video[代码][代码][代码][代码][代码][代码] [代码][代码]id[代码][代码]=[代码][代码]"{{ video.id }}"[代码][代码][代码][代码][代码][代码] [代码][代码]data-id[代码][代码]=[代码][代码]"{{ video.id }}"[代码][代码][代码][代码][代码][代码] [代码][代码]controls[代码][代码]=[代码][代码]"{{ true }}"[代码][代码][代码][代码][代码][代码] [代码][代码]bindplay[代码][代码]=[代码][代码]"handleVideoPlayEvent"[代码][代码][代码][代码][代码][代码] [代码][代码]bindpause[代码][代码]=[代码][代码]"handleVideoPauseEvent"[代码][代码][代码][代码][代码][代码] [代码][代码]bindended[代码][代码]=[代码][代码]"handleVideoEndedEvent"[代码][代码][代码][代码][代码][代码] [代码][代码]bindfullscreenchange[代码][代码]=[代码][代码]"handleVideoFullScreenEvent"[代码][代码][代码][代码][代码][代码] [代码][代码]src[代码][代码]=[代码][代码]"{{ video.cdn_url }}"[代码][代码][代码][代码][代码][代码] [代码][代码]poster[代码][代码]=[代码][代码]"{{ video.preview_pic_url }}"[代码] [代码]/>[代码][代码][代码][代码][代码][代码] [代码][代码]view[代码][代码]>[代码][代码][代码][代码][代码][代码][代码][代码][代码][代码] [代码][代码]view[代码][代码]>[代码][代码][代码][代码][代码][代码][代码][代码][代码][代码][代码] [代码][代码]<[代码][代码]view[代码] [代码]class[代码][代码]=[代码][代码]"btn-area"[代码][代码]>[代码][代码][代码][代码][代码][代码][代码][代码] [代码][代码]<[代码][代码]input[代码] [代码]bindblur[代码][代码]=[代码][代码]"bindInputBlur"[代码][代码]/>[代码][代码][代码][代码][代码][代码][代码][代码] [代码][代码]<[代码][代码]button[代码] [代码]bindtap[代码][代码]=[代码][代码]"handleTap"[代码] [代码]data-id[代码][代码]=[代码][代码]"{{ Num }}"[代码][代码]>点击播放button[代码][代码]>[代码][代码][代码][代码][代码][代码][代码] [代码][代码]view[代码][代码]>[代码][代码][代码][代码][代码][代码][代码][代码][代码][代码]>[代码][代码][代码][代码][代码]index.js [代码]const config = {[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]Num: 12345,[代码][代码] [代码][代码]video: {[代码][代码] [代码][代码]id: 12345,[代码][代码] [代码][代码]preview_pic_url: [代码][代码]'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000'[代码][代码],[代码][代码] [代码][代码]cdn_url: [代码][代码]'http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400'[代码][代码] [代码][代码]},[代码][代码] [代码][代码]videoContextList: [][代码][代码] [代码][代码]},[代码][代码] [代码][代码]onLoad () {[代码][代码] [代码][代码]const { Num } = [代码][代码]this[代码][代码].data;[代码][代码] [代码][代码]// this.videoContext = wx.createVideoContext(String(Num));[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]videoContextList: [[代码][代码] [代码][代码]{ id: Num, ctx: wx.createVideoContext(String(Num))}[代码][代码] [代码][代码]][代码][代码] [代码][代码]});[代码][代码] [代码][代码]},[代码][代码] [代码][代码]getVideoContext(id) {[代码][代码] [代码][代码]const { videoContextList } = [代码][代码]this[代码][代码].data;[代码][代码] [代码][代码]// 对每一个video都按照单例模式设置[代码][代码] [代码][代码]return[代码] [代码]videoContextList.find(video => video.id === id).ctx || wx.createVideoContext(String(id));[代码][代码] [代码][代码]},[代码][代码] [代码][代码]/**[代码][代码] [代码][代码]* 点击图片开始播放[代码][代码] [代码][代码]* @param {*} event[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]handleTap(event) {[代码][代码] [代码][代码]const { currentTarget: { dataset: { id }}} = event;[代码][代码] [代码][代码]const ctx = [代码][代码]this[代码][代码].getVideoContext(id);[代码][代码] [代码][代码]console.log(ctx);[代码][代码] [代码][代码]// 点击图片时,必然是非全屏状态,此时必然没有播放,直接play即可[代码][代码] [代码][代码]ctx.play();[代码][代码] [代码][代码]},[代码][代码] [代码][代码]/**[代码][代码] [代码][代码]* 视频播放事件处理函数[代码][代码] [代码][代码]* 开始播放时自动全屏[代码][代码] [代码][代码]* @param {*} event 播放[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]handleVideoPlayEvent(event) {[代码][代码] [代码][代码]const { currentTarget: { dataset: { id }}} = event;[代码][代码] [代码][代码]const ctx = [代码][代码]this[代码][代码].getVideoContext(id);[代码][代码] [代码][代码]console.log(ctx);[代码][代码] [代码][代码]ctx.requestFullScreen();[代码][代码] [代码][代码]},[代码][代码] [代码][代码]/**[代码][代码] [代码][代码]* 视频暂停事件处理函数[代码][代码] [代码][代码]* @param {*} event 暂停[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]handleVideoPauseEvent(event) {[代码][代码] [代码][代码]console.log(event);[代码][代码] [代码][代码]},[代码][代码] [代码][代码]/**[代码][代码] [代码][代码]* 全屏事件处理函数[代码][代码] [代码][代码]* @param {*} event 事件[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]handleVideoFullScreenEvent(event) {[代码][代码] [代码][代码]console.warn([代码][代码]'handleVideoFullScreenEvent'[代码][代码]);[代码][代码] [代码][代码]const { detail: { fullScreen }, target: { dataset: { id }} } = event;[代码][代码] [代码][代码]const ctx = [代码][代码]this[代码][代码].getVideoContext(id);[代码][代码] [代码][代码]console.log(ctx);[代码][代码] [代码][代码]// 退出全屏时,若正在播放,则自动暂停,且跳到起始位置[代码][代码] [代码][代码]if[代码] [代码](!fullScreen) {[代码][代码] [代码][代码]ctx.seek(0);[代码][代码] [代码][代码]ctx.pause();[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]/**[代码][代码] [代码][代码]* 视频播放到末尾的处理函数[代码][代码] [代码][代码]* @param {*} event 自然播放结束[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]handleVideoEndedEvent(event) {[代码][代码] [代码][代码]console.log(event);[代码][代码] [代码][代码]}[代码][代码]};[代码] [代码]Page(config);[代码]wxss样式 [代码].video-item {[代码][代码] [代码][代码]width: 100%;[代码][代码] [代码][代码]height: 100%;[代码][代码]}[代码][代码].video-item video {[代码][代码] [代码][代码]width: 100%;[代码][代码] [代码][代码]height: 100%;[代码][代码]}[代码][代码].video-item .video-item-discover{[代码][代码] [代码][代码]position: relative;[代码][代码] [代码][代码]width:100%;[代码][代码] [代码][代码]height:100%;[代码][代码]}[代码][代码].video-item .video-item-discover .video-item-btn{[代码][代码] [代码][代码]position: absolute;[代码][代码] [代码][代码]width: 70rpx;[代码][代码] [代码][代码]height: 70rpx;[代码][代码] [代码][代码]top: 50%;[代码][代码] [代码][代码]left: 50%;[代码][代码] [代码][代码]transform: translate(-50%, -50%);[代码][代码] [代码][代码]z-index: 100;[代码][代码]}[代码][代码].video-item .video-item-discover .video-item-discover-bg{[代码][代码] [代码][代码]width: 100%;[代码][代码] [代码][代码]height: 100%;[代码][代码] [代码][代码]filter: brightness(0.6);[代码][代码]}[代码][代码].section.tc {[代码][代码] [代码][代码]display: flex;[代码][代码] [代码][代码]align-items: center;[代码][代码] [代码][代码]justify-content: center;[代码][代码] [代码][代码]flex-wrap: wrap;[代码][代码]}[代码][代码].section.tc .video-item .video-item-discover{[代码][代码] [代码][代码]width: 200px;[代码][代码] [代码][代码]height: 200px;[代码][代码] [代码][代码]flex-basis: 100vw;[代码][代码] [代码][代码]margin: 0 auto;[代码][代码]}[代码]
2017-12-06 - wx.getBackgroundAudioManager 不是function
在小程序运维中心发现以下报错: wx.getBackgroundAudioManager is not a function; App catch error in lifeCycleMethod onLaunch function 但是查了半天没发现报错,目前猜想可能是小程序onLaunch的时候,wx对象并没有实例化完全,但是本地调试很难重现这个问题。 [图片] 在我自己的代码里进行测试,发现没啥事。。。
2017-10-29