有个 bug ,我们在回退变更。
ios的form_id变成36位的字母数字-组合ios的form_id变成了dde9ae7e-3152-46ac-9fd5-84b04fc9b476,不能接收服务通知,invalid form id hint
2019-01-18感觉可能是个时序问题。#authorize 是一开始就存在于页面中的吗?还是某次 setData 引入的?
引用自定义组件方法线上报错自定义了一个授权弹窗组件,里面有个显示或者关闭弹窗的方法openFn,在进入小程序首页的时候会判断用户是否授权获取用户信息,如果没有,会调用组件的openFn方法弹窗提示用户授权。 首页在onready里面获取组件实例,代码如下: [代码]onReady() {[代码][代码] [代码][代码]this[代码][代码].authorize = [代码][代码]this[代码][代码].selectComponent([代码][代码]'#authorize'[代码][代码])[代码][代码] [代码][代码]console.log([代码][代码]this[代码][代码].authorize,[代码][代码]'onready+++打印组件实例'[代码][代码])[代码][代码] [代码][代码]},[代码]然后在onload里面调用一个方法判断用户是否授权,代码如下: [代码]isAuthorize: [代码][代码]function[代码] [代码]() {[代码][代码]//判断用户是否授权[代码][代码] [代码][代码]let that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]wx.getSetting({ [代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]if[代码] [代码](res.authSetting && res.authSetting[[代码][代码]'scope.userInfo'[代码][代码]]) { [代码][代码]//用户有授权,直接调用函数进行登录 [代码][代码] [代码][代码]that.authorizeSuccFn()[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{ [代码][代码]//用户未授权,弹窗引导用户授权[代码][代码] [代码][代码]that.setData({[代码][代码] [代码][代码]isOpensetting: [代码][代码]false[代码][代码],[代码][代码] [代码][代码]authorizeMsg: [代码][代码]'亲,该小程序需要授权用户信息才能使用'[代码][代码] [代码][代码]})[代码][代码] [代码][代码]that.authorize.openFn()[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码]自己在本地调试工具和手机上测试都是没有问题,但是线上却一直报错,求大神指导下是怎么回事。 报错信息: [图片]
2019-01-18这个功能是有的。 等等,如果是小程序传个字符串进来,而且是没有协议头的本地文件路径,那 image 组件会认为这是相对于插件路径的。请问报错的这个路径是否正确呢?
插件内使用image组件还是不能添加外部图片啊- 需求的场景描述(希望解决的问题) [图片] 插件内组件布局加入image,提供外部属性让用户设置src图片,导致以上错误。。。 - 希望提供的能力 之前提过这个需求,你们也在需求评估里加入了这个说明,我看过你们的说明,但是过了这么久还没开发出来,几个月时间还是未提供这个功能就真的让我产生疑问的呢。。。希望能尽快加入此功能,因为我有这个需求,也相信有人希望加入这个功能。
2018-12-29WXML 面板以 shadow root 方式展示节点树,实际位置应该是无误的。 如果你往 slot 里面放一个节点,这个节点的 class 并不应用组件的 wxss 样式,而是应用这个组件所在的父组件或页面的样式。换而言之,组件的 wxss 只影响真正写在组件 wxml 里面的节点,不影响 slot 下的节点。
BUG slot插槽位置渲染错误,样式不调用组件样式- 当前 Bug 的表现(可附上截图) 组件,注意slot位置在 [图片] 引用之后插入slot [图片] 渲染后的页面,变成了同级元素,而不是`button-list`子元素. 而且填充slot的元素没有引用button.wxss的样式。需要在引用页面在写一遍。很鸡肋 [图片] - 预期表现 - 复现路径 普通编译即可 - 提供一个最简复现 Demo 已提供
2018-12-28感谢反馈。在启用插件时,会激活基础库里面的一段插件处理逻辑。这段逻辑里处理了 setPrototypeOf 方法,具体原因正在调查中。
启用插件时,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-28这两个功能实际上并不是一回事,但也有相互影响。我描述一下这里的逻辑。 默认情况下,自定义组件的 class="my-class" ,其中的 my-class 只能够在这个自定义组件的 wxss 中赋予样式,同时,这个自定义组件的 wxss 只对这个自定义组件生效。(这里就像是给 my-class 自动加入了一个前缀,像 class="xxx--my-class" 这样,同时 wxss 中也会变成 .xxx--my-class { } 。) 如果加入 addGlobalClass 选项,my-class 可以在 app.wxss 和 Page 的 wxss 中赋予样式,但这个自定义组件的 wxss 仍然只对这个自定义组件生效。(这里就像是 class="my-class xxx--my-class" 这样。) 使用 externalClass 就是另一回事了。 externalClass 由组件的父组件提供类名。这种方式类似于基础库里面 view 组件的 hover-class 这样的属性, view 的这个属性可以让页面决定 hover 时使用的样式类,这个样式类也是写在页面的 wxss 中。比如你想做一个自定义组件,自定义组件中 WXML 的一个节点的 class 是由使用这个自定义组件的页面来确定的,而且这个 class 也写在页面的 wxss 文件(或 app.wxss)中,那你应该在这里使用 externalClass 。
组件加载外部类externalClasses和addGlobalClass到底是组件引用外部类,文档是这么说的: https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html 可是externalClasses和addGlobalClass到底是什么逻辑 官方能否在文档详细说明一下 经过NNNNNN验证,发现这2个是互斥的,同一个类不能同时使用2种方法 addGlobalClass引用外部类的时候, 为什么有的时候起作用,有时候有不可以呢(需要在类前面写上'view.'才能生效) 头大头大啦~~~~~~~~~~~
2018-12-27我们已有相关特性的设计讨论。之后可以关注一下基础库或者 github/wechat-miniprogram 的更新。
能否增加一个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-12-24旧版本基础库曾经有类似的 bug 。麻烦看下开发者工具中项目设置中的选择的基础库版本号?
插件开发的时候调用wx.getImageInfo 提示域名不在列表中- 当前 Bug 的表现(可附上截图) [图片] 不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书 我也勾上了 但是还是提示 这样的错误
2018-12-21{{ {foo: 1, bar: 2} }} 这样
wxml里面数据绑定组建一个对象报错- 当前 Bug 的表现(可附上截图) [图片] 我是在api文档看到应该有这个功能的,这还是api上面的demo改了下,不知道为什么不行,是不是我写错了,还是我犯了啥低级错误?? - 预期表现 - 复现路径 - 提供一个最简复现 Demo [图片]
2018-12-20