- input 和 textarea 的 input 事件,e.timeStamp 的拼写不对?
上一个帖子没有后续回复了,重新发一次请求回复 https://developers.weixin.qq.com/community/develop/doc/000e40d139c6502eb3000a07161800 我的回复:你注意看输出里黄色那一行,对于input事件大写S是空的,小写s才有值。而其他事件都是大写有值小写没有。 ==============原始内容============== 根据文档(https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html#timeStamp),事件中的时间戳应当为 timeStamp。而在input 和 textarea 的 input 事件中,却使用了 timestamp (注意s变成了小写)。 复现链接: https://developers.weixin.qq.com/s/PevNWNm57qJ7 复现方法: 打开上面链接后,在页面中的 input 和 textarea 进行输入,会发现 console 里输出的事件信息:只有 input 事件有大小写问题 类似问题: https://developers.weixin.qq.com/community/develop/doc/d4a2a59586831ae4deb618789a3b1c3c?highLine=timestamp
2023-07-31 - input 和 textarea 的 input 事件,e.timeStamp 的拼写不对?
根据文档(https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html#timeStamp),事件中的时间戳应当为 timeStamp。而在input 和 textarea 的 input 事件中,却使用了 timestamp (注意s变成了小写)。 复现链接: https://developers.weixin.qq.com/s/PevNWNm57qJ7 复现方法: 打开上面链接后,在页面中的 input 和 textarea 进行输入,会发现 console 里输出的事件信息:只有 input 事件有大小写问题 类似问题: https://developers.weixin.qq.com/community/develop/doc/d4a2a59586831ae4deb618789a3b1c3c?highLine=timestamp
2023-07-18 - 微信开发者工具中,复制URL参数时被重复编码
复现方法 打开代码片段 https://developers.weixin.qq.com/s/Ul85kSmi7Tc1 点击页面上的“go to /index/page”按钮,跳转进入/index/page 在开发者工具左下角复制URL参数 问题 可以发现,复制出来的参数为 name=%25E5%258C%2597%25E4%25BA%25AC 但实际上开发者工具显示的是(onLoad生命周期中的options也是) name=%E5%8C%97%E4%BA%AC [图片] 可见,在复制的时候多做了一次编码工作,即 encodeURI('name=%E5%8C%97%E4%BA%AC') === 'name=%25E5%258C%2597%25E4%25BA%25AC' 相关讨论 在这两个帖子中有关于这个bug的讨论,但没有后续跟进 https://developers.weixin.qq.com/community/develop/doc/0004c8e9a78710e6715941c3d56400?highline=%E5%A4%8D%E5%88%B6%20%E5%8F%82%E6%95%B0 https://developers.weixin.qq.com/community/develop/doc/000a4ad1ca86480c7a69869525bc00?highLine=%25E5%25A4%258D%25E5%2588%25B6%2520%25E5%258F%2582%25E6%2595%25B0 在本帖中,提供了可以复现的代码片段以及开发者工具版本,望官方能够重视并修复
2019-11-14 - 连续调用wx.navigateTo会跳转失败
问题概述 在wx.navigateTo的success回调函数中继续调用wx.navigateTo,页面跳转与预期不一致。 复现方法 1. 使用代码片段 https://developers.weixin.qq.com/s/PbxxKcmZ7Q7e 2. 点击页面中的navigate按钮,将会通过递归进行多次页面跳转,代码如下: [代码]const NAVIGATE_COUNT = 5;[代码] [代码]const navigate = (times) => {[代码][代码] [代码][代码]const url = `/page/index?times=${times}`;[代码][代码] [代码][代码]console.log([代码][代码]'navigate to'[代码][代码], url);[代码][代码] [代码][代码]wx.navigateTo({[代码][代码] [代码][代码]url,[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]console.log([代码][代码]'success'[代码][代码], times, res);[代码][代码] [代码][代码]if[代码] [代码](times > 1) {[代码][代码] [代码][代码]navigate(times - 1);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail(res) {[代码][代码] [代码][代码]console.log([代码][代码]'fail'[代码][代码], times, res);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码]}[代码][代码]navigate(NAVIGATE_COUNT);[代码]3. 在模拟器和iOS上,会出现页面历史丢失的现象(可以通过后退查看页面栈,会发现数量比预期的少);在Android上没有此问题 4. 点击页面中的navigate with timeout按钮,该按钮与前者的区别在于会在success后使用setTimeout延迟300ms再进行调用 [代码]success(res) {[代码][代码] [代码][代码]console.log([代码][代码]'success'[代码][代码], times, res);[代码][代码] [代码][代码]if[代码] [代码](times > 1) {[代码][代码] [代码][代码]navigate(times - 1);[代码][代码] [代码][代码]}[代码][代码]},[代码]5. 在模拟器/iOS/Android中均可以正常跳转
2019-03-28 - app.wxss中的样式无法覆盖到subpackage里的:host伪类
代码片段: https://developers.weixin.qq.com/s/K8Npumm97n6s 复现方法: [图片] 在 app.wxss 中添加样式 .blue { color: blue } 在index/index页面(属于主包)下使用组件 <comp class="blue"> comp组件内使用 :host { color: red } ,这是文档中有说明可以使用的( 除此以外,组件可以指定它所在节点的默认样式,使用 :host 选择器 ) 相同的,在子包 packageA中建立 packageA/index页面,内容一致 保险起见,所有页面/组件都添加了 addGlobalClass: true,但事实上不加也不影响复现 期望行为: index/index 和 packageA/index 中的文本都显示为蓝色( color: blue) 实际行为: 只有主包里的 index/index 显示为蓝色,子包中的并没有生效
2019-02-22 - 关于JSON解析时 Unicode U+2028 等字符的bug
- 概述 wx.request 对于含有 U+2028 等字符的 Response Body 存在错误的过度处理(注意:该问题只在真机上复现)。 经过查找文章和社区,我发现这是一个反馈较多的问题(参见最后“可能的相关问题”部分),对于特殊字符很多人选择了进行过滤,但这是不对的,正确的做法应当是对其进行合理编码、解码。 - JSON对特殊字符的处理 在详细描述bug之前,我们先了解下JSON处理中特殊字符的正确处理方式。 在 ECMAscript 5.1 ( https://www.ecma-international.org/ecma-262/5.1/#sec-15.12.2 ) 中有这样一句话: JSON uses a more limited set of white space characters than WhiteSpace and allows Unicode code points U+2028 and U+2029 to directly appear in JSONString literals without using an escape sequence. 这意味着 JSON.stringify 和 JSON.parse 都不应当对空格、U+2028、U+2029这三个字符进行转义,例如对于空格: [图片] 可以看到空格未进行转义,同样的道理,U+2028 也不会被转义: [图片] 但对于 '\n' ,是需要转义的: [图片] 因此可以得出结论,在HTTP Response中 U+2028 等字符是不应当被转义的;由于这两个字符被创造也是有其含义和目的,更不应当被过滤掉(如 https://developers.weixin.qq.com/community/develop/doc/8d93389c3bea4acff6e7bb765c3e634f?highLine=2028 和 https://developers.weixin.qq.com/community/develop/doc/f085c4b5f547113dbb032d0f4b46e1b5 ) - wx.request 的问题 在 wx.request 对JSON的处理中,没有正确将 JSON String 解析为 Object,而是将 String进行了返回,同时将 U+2028 和 U+2029 两个字符替代成了 \n 。在这一过程中存在如下问题: 假设wx.request处理JSON异常,应当触发fail回调函数传递具体的错误,给用户明确的意图,而不是调用 success 给出未能成功解析的字符串。(举一个例子,JSON.parse 结果并不一定是Object,如 http://www.mocky.io/v2/5bea7d792f0000df0bda3a4e 这个接口在浏览器用fetch调用返回的就是字符串)。 wx.request应当能正常处理含有U+2028 等字符的Response,应当原样保留这些特殊字符并反馈 JSON.parse 出的结果 但是通过调试可以发现,wx.request对U+2028 等字符进行了错误的处理,在返回的 String 中将其替换成了 \n (注意不是 \\n,前者是一个字符,后者是两个字符),这进一步导致了用户难以通过 JSON.parse 手动解析String数据: [图片] 在上面的例子中我说过 '\n' 是应该被转义为 '\\n' 的,否则在 JSON.parse 的时候就会造成报错。 - 预期表现 wx.reqeust应该正确处理特殊字符 wx.request在JSON解析失败时应当调用fail回调 - 临时解决方案 这是一个会有bug的解决方案,原因不再赘述,仅供参考: [代码]wx.request({[代码][代码] [代码][代码]url: [代码][代码]"http://xxx"[代码][代码],[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]const originData = res.data;[代码] [代码] // 无法处理纯字符串的情况,慎用[代码] [代码] [代码][代码]const data =[代码][代码] [代码][代码]typeof[代码] [代码]originData === [代码][代码]"string"[代码][代码] [代码][代码]? JSON.parse(originData.replace(/\n/g, [代码][代码]"\\n"[代码][代码]))[代码][代码] [代码][代码]: originData;[代码][代码] [代码][代码]console.log(data); [代码][代码]// 替代 res.data[代码][代码] [代码][代码]}[代码][代码]});[代码] - 复现路径 在这个代码片段中 https://developers.weixin.qq.com/s/iam8hTmP7m3S ,可以通过点击不同button分别调用含有 \n 、\u2028、\u2029 和空格的接口,查看console的输出。 注意:必须在真机上才能复现,模拟器不可以 - 可能的相关问题 https://developers.weixin.qq.com/community/develop/doc/8d93389c3bea4acff6e7bb765c3e634f?highLine=2028 https://developers.weixin.qq.com/community/develop/doc/000ca414b64b1099bb1701ce55b800?highLine=2028 https://developers.weixin.qq.com/community/develop/doc/99f032bff8b2a6ccb37ffd4414aa5575?highLine=json%25202028 https://developers.weixin.qq.com/community/develop/doc/000c443ed5c488009dd6b81aa51404?highLine=2028 https://developers.weixin.qq.com/community/develop/doc/f085c4b5f547113dbb032d0f4b46e1b5 https://developers.weixin.qq.com/community/develop/doc/ca057a276c3e316cb5086b0b26a69763 此外这个问题反馈了U+2028与setData使用的bug,我猜测可能与本问题可能存在一定的关联性: https://developers.weixin.qq.com/community/develop/doc/000c443ed5c488009dd6b81aa51404?highLine=2028
2018-11-13 - 同时使用multiSlots和capture事件,在某些情况下会监听失效
复现条件: 必须使用multiSlot 在某个slot内部的某个组件触发事件,例如trigger-event>/trigger-event>,其中trigger-event可以触发事件 且事件的bubbles、composed、capturePhase均为true 在slot外层监听该事件 复现问题: 如代码片段所示,在最后一种特定情况下,事件监听失效了。也就是说点击“Click me”无法在console.log打出日志,页面也不会有显示 [图片]
2018-08-15