我调用 wx.scanCode 的按钮不是在页面上,而是 tabBar的 item,扫码的实现在 pages/scan/scan,其中 /pages/scan/scan 页面关联到 “PC认证” 菜单项,希望的效果是:点击 “PC认证” 菜单,加载 /pages/scan/scan 页面,拉起扫码窗口,扫码成功,如果误点了“PC认证”菜单,在扫码窗口点击取消(左上角的圆叉),会跳转到 /pages/order/order
因为 tabBar的 item 没有事件,所以我把 wx.scanCode 单独封到一个页面函数 abc ,然后在页面 onShow 的时候调用函数 abc,现在问题是:如果仅仅这样,会弹两次扫码窗口,跟踪下来发现是窗口加载调用了一次 abc,wx.scanCode 的时候好像调用了一次,跟踪下来只能猜测到这个份上了,不然我解释不了为什么会弹两次。
所以我加了一个标志 inScan 到 data 里,初始为 false,第一次执行 wx.scanCode的时候置为 true,然后页面 onShow的时候判断一下,如果 inScan,则不调用 abc
这又产生一个新问题,在扫码过后,切到其他菜单页面,然后再切回 “PC认证”,这时候标志位 inScan 还是 true 导致不能扫码,所以又在 onUnload 里把标志位还原成 false,发现没有,基本不触发这个钩子,所以改到 onHide里去还原 inScan。
现在又导致另外一个现象,就是扫码完成,或者点击扫码窗口的圆叉取消,都会反复自动跳出扫码窗口。好像是 wx.scanCode 的 success 或 fail 都会触发 onHide 钩子
上面这些描述,现象是准确的,原因分析部分靠调试,部分靠猜测,请教。。
补充说明,所以我把 wx.scanCode 单独封到一个页面函数 abc,这一点是因为 pages/scan/scan 页面上还有按钮需要复用 abc ,比如当二维码过期了,在 scan 页面上点击“重新扫码”再次调用扫码,如果上面问题解决不了,那“重新扫码”这个按钮也会失效