- 启用插件时,Object.setPrototypeOf 被设为了错误的函数
- 当前 Bug 的表现 1. 未使用插件时不会触发这个异常。 2. 使用插件时,全局的 `Object.setPrototypeOf` 会被覆写,并且覆写的方法没有按 ecma-262 的定义返回第一个传参的值。 3. 在实际应用中,如果使用了 babel 提前编译代码,会有大量依赖于 `Object.setPrototypeOf` 的方法无法按预期执行,例如使用了继承语法的代码会由于 https://github.com/babel/babel/blob/0859535b/packages/babel-helpers/src/helpers.js#L517-L546 中读取的 `Object.setPrototypeOf` 的返回值变成 `undefined` 而抛出异常。 4. 该异常的根源可以排查到是在小程序的 `appservice/__dev__/WAService.js` 中,经 VSCode - Format Document 反混淆后位于 4908-4913 行(不同的反混淆工具得出的具体的行数也不同),截图可参考:https://media.discordapp.net/attachments/410768182102589454/527489845140914178/unknown.png [代码]// WAService.js 4908-4913L[代码] [代码] [代码] [代码]Object.defineProperty(o.Object, [代码][代码]"setPrototypeOf"[代码][代码], {[代码] [代码] [代码][代码]value: [代码][代码]function[代码] [代码](e, t) {[代码][代码] [代码][代码]e.__proto__ = t[代码][代码] [代码][代码]},[代码][代码] [代码][代码]configurable: !0[代码][代码]})[代码] 2018.12.27 补充:使用微信开发者工具的 Devtools 反混淆后位于 6040-6045L - 预期表现 `Object.setPrototypeOf(o, p)` 应返回 `o`。 具体可查阅: - https://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf#Notes - https://github.com/babel/babel/blob/0859535b/packages/babel-helpers/src/helpers.js#L444-L452 Object.setPrototypeOf ( O, proto ) When the setPrototypeOf function is called with arguments O and proto, the following steps are taken: 1. Let O be RequireObjectCoercible(O). 2. ReturnIfAbrupt(O). 3. If Type(proto) is neither Object nor Null, throw a TypeError exception. 4. If Type(O) is not Object, return O. 5. Let status be O.[[SetPrototypeOf]](proto). 6. ReturnIfAbrupt(status). 7. If status is false, throw a TypeError exception. 8. Return O. 例如改为: [代码]function[代码] [代码]_setPrototypeOf(o, p) {[代码][代码] [代码][代码]o.__proto__ = p;[代码][代码] [代码][代码]return[代码] [代码]o;[代码][代码]}[代码] - 复现路径 请使用下面的小程序代码片段复现 - 提供一个最简复现 Demo 小程序代码片段: https://developers.weixin.qq.com/s/VWjLSXmb724n 当 app.json 中去除了 plugins 时,测试用例通过;当 app.json 中包含 plugins 时,测试用例不通过。 - 2018.12.27 第一次更新 有人处理吗? 这个问题的影响面很大,使用 babel 自行预编译代码的用户可能随时都会踩到这个雷。我是 tinajs 和 mina-webpack 的作者(社区里的用户大部分都会在项目中使用 babel),昨天从一位用户反馈的情况排查到这个问题,相关的讨论可以在这里查阅: https://discordapp.com/channels/410768182102589451/410768182102589454 - 2018.12.27 第二次更新 我更新了测试用例的代码片段:https://developers.weixin.qq.com/s/zLmvOYmU7w4x 通过在 WAService.js:formatted - 6042 Line 打断点(可搜索 Object, 快速找到这个位置),然后点击模拟器界面中的「测试」按钮,可以确认问题代码确实就出在这一函数。
2018-12-26 - 安卓中无权限保存图片时的错误码与调试工具不一致
当用户拒绝授权保存图片到相册时: 开发工具 / iOS,错误码为 saveImageToPhotosAlbum:fail auth deny 安卓,小程序 SDK 2.1.0,错误码为 saveImageToPhotosAlbum:fail:auth denied 真机截图: 安卓: [图片] [图片] iOS: [图片]
2018-06-14 - 希望自定义组件可以支持 :host([attr]) 等选择器
* 你希望有什么能力? 希望自定义组件可以支持 :host([attr])、:host(:status) 等选择器语法。 * 你需要这个能力的场景是 ? 我尝试着将 WeUI 封装成自定义组件,比如以下这两段代码封装并使用了 weui-button 组件 —— 其中我希望当 weui-button 的 size 属性为 mini 的时候,这个自定义组件的 display 为 inline-block: 组件实现:https://github.com/imyelo/weui.mina/blob/14927c7212b8eb2952e85d02bf5bafe391ceaa8b/src/button.mina#L53-L58 [代码]:host([size=mini]) {[代码][代码] [代码][代码]display[代码][代码]: inline-[代码][代码]block[代码][代码];[代码][代码]}[代码] 使用示例:https://github.com/imyelo/weui.mina/blob/14927c7212b8eb2952e85d02bf5bafe391ceaa8b/storybook/src/pages/button.mina#L32-L34 [代码]<[代码][代码]weui-button[代码] [代码]type[代码][代码]=[代码][代码]"primary"[代码] [代码]size[代码][代码]=[代码][代码]"mini"[代码][代码]> 按钮 </weui-button>[代码] 但目前在最新基础库版本 1.9.91 中无效(具体表现为括号内的选择器被忽视,并直接覆盖了无附加选择器的 :host 的样式,即所有的 weui-button host 都变成了 display: inline-block)。 此外例如在实现列表 Cell 组件时,希望 first-child 的 border-top 为 none,也无法做到: https://github.com/imyelo/weui.mina/blob/14927c7212b8eb2952e85d02bf5bafe391ceaa8b/src/cell.mina#L45-L50 [代码]:host(:first-child) {[代码][代码] [代码][代码]border-top[代码][代码]: [代码][代码]none[代码][代码];[代码][代码]}[代码] 参考资料: https://developers.google.com/web/fundamentals/web-components/shadowdom#host https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813#terminologies-1 http://robdodson.me/shadow-dom-css-cheat-sheet/
2018-03-15 - 审核被拒(无运营内容)
你的小程序"HackerNews热点"代码发布审核未通过,原因如下: 1:小程序内容不符合规则: (1):小程序打开只有功能模块,无具体运营内容,请上架内容再提交代码审核 如有疑问,请查看详情与反馈。 你好,我这边目前展示内容是正常的。😀 [图片]
2018-01-11 - 审核被拒存疑
目前小程序审核被拒: 你的小程序 "HackerNews 热点" 代码发布审核未通过,原因如下: 1: 小程序内容不符合规则: (1): 你好,贵方小程序涉及时政新闻,请补充选择时政信息类目 如有疑问,请查看详情与反馈。 HN 只是科技类的资讯,不涉及时政新闻。与 GitHub 类似,都是在国内可以正常访问的程序员网站。 关于 HN: https://www.zhihu.com/question/19661127 https://en.wikipedia.org/wiki/Hacker_News 另外不得不吐槽下,就像开源社区中已有的 HNPWA 一样: https://hnpwa.com/ https://github.com/tastejs/hacker-news-pwas 做一个 HN 开源客户端的小程序版,本应是非常有利于推动技术社区了解小程序的事情,却没料到在审核时遇到这么多障碍;加上此前个人主体不过审: 你的小程序"HackerNews热点"代码发布审核未通过,原因如下: 1:小程序内容不符合规则: (1):涉及个人小程序未开放类目:资讯类目,建议选择企业主体小程序。 如有疑问,请查看详情与反馈。 你的小程序"HackerNews热点"代码发布审核未通过,原因如下: 1:小程序内容不符合规则: (1):涉及个人小程序未允许内容:文娱-资讯,建议选择企业主体小程序。 如有疑问,请查看详情与反馈。 到现在换成企业主体仍然被拒,已经花了快半个月时间在处理审核的问题,实在让人想放弃了。 😔
2018-01-02 - 安卓 input 组件双向绑定异常
环境: 系统:安卓 6.0.1,MIUI 8.5 输入法:搜狗输入法小米版 微信:6.5.16 重现用例: [代码]<[代码][代码]view[代码] [代码]class[代码][代码]=[代码][代码]"view"[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]input[代码] [代码]type[代码][代码]=[代码][代码]"text"[代码] [代码]placeholder[代码][代码]=[代码][代码]"请输入文字"[代码] [代码]value[代码][代码]=[代码][代码]"{{ value }}"[代码] [代码]bindinput[代码][代码]=[代码][代码]"input"[代码] [代码]/>[代码][代码][代码]view[代码][代码]>[代码][代码][代码]Page({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]value: [代码][代码]''[代码][代码],[代码][代码] [代码][代码]},[代码][代码] [代码][代码]input (event) {[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]value: event.detail.value,[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码]})[代码] 用输入法打几个字母,然后快速地连续按退格删除,会出现输入框内值乱串。如果在退格删除后马上再输入内容也会异常,比如退格后输入 1234 可能只会出现 14。 其他线索: 1. 输入框类型如果用 number、idcard、digit 都不会重现,只有 text 有问题,可能是和输入法有关。 2. 测试了 iOS 系统使用英文键盘也不会重现。
2017-11-07