syncCheck问题
WechatCore syncCheck()方法中eval(res.data)经常出错 建议改写,不要用eval这种写法
具体错误是什么?
有时候会收到一些二进制数据,eval就会出错,例如这样的(base64 encode):
AQAGAFB3/f0OH/13/f0OAf13/f0OAFD9/QP9H/39/QP9Af39/QP9AAAT/QAABAA=
可以捕获eval异常,然后假装retcode和selector都是0,后续收发消息都是正常的。
官方网页版微信就是通过执行返回的代码然后获取被赋值的对象来得到retcode的,这是解决跨域的一种方法
如果返回了奇怪的数据,那么网页版微信同样也会异常
wechat4u实现了异常重试的机制,所以因该不需要再对这里进行特殊处理吧
我在chrome环境下,syncCheck居然会偶尔返回乱码
o¨ar9Ídó»Ýz=ésÝRAiÀ8²<aοªâ&k
导致request就不往下执行也不报错。应该是axios处理乱码出了问题,我把syncCheck那块带request换成XMLHttpRequest就可以对乱码报错。
微信网页版syncCheck也偶尔会返回乱码,但是会再次发起syncCheck。
@JimmyBryant 返回乱码这个问题是后台才发生的,但是没有影响node环境的同步,chrome环境还没测试过哈
你能定位到是具体哪个位置导致这个问题产生的么?
问题在src/core.js=>syncCheck方法。 当返回乱码的时候,request后面的then以及catch不工作
return this.request({ method: 'GET', url: this.CONF.API_synccheck, params: params }).then(res => { let window = { synccheck: {} } // eslint-disable-next-line eval(res.data) assert.equal(window.synccheck.retcode, this.CONF.SYNCCHECK_RET_SUCCESS, res) return window.synccheck.selector })