- Android客户端开啟公眾号,调用 wx.config 没有响应 怎么回事?
问题描述 公眾号有部份页面是用vue做的,如果从微信号菜单直接进入vue页面可以正常调用 wx.config 但如果是先进入其他公眾号网页再透过连接进入vue页面,调用 wx.config 就会没有响应,wx.ready与wx.error都不会触发 系统 Android 问题微信版本 7.0.15, 7.0.16, 7.0.17 正常微信版本 7.0.10, 7.0.12, 7.0.13 及以下版本,实测将有问题的手机降版后不存在此问题 调试代码 // index.html <a href="test.html">测试页</a> <script> function onBridgeReady() { console.log('WeixinJSBridgeReady') alert('WeixinJSBridgeReady') } if (typeof WeixinJSBridge === 'undefined') { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else{ onBridgeReady(); } </script> // test.html <button onclick="config()">wx.config()</button><br><br> <button onclick="scan()">wx.scanQRCode()</button><br><br> <button onclick="location.reload()">location.reload()</button><br><br> <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <script> // 模拟vue载入时的pushState history.pushState({}, 'H5', '#/'); function onBridgeReady() { console.log('WeixinJSBridgeReady') alert('WeixinJSBridgeReady') } if (typeof WeixinJSBridge === 'undefined') { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else{ onBridgeReady(); } // 手动进行config function config() { jQuery.ajax( '/api/jssdk_config', { data: { url: location.href.split('#')[0] }}) .done(function (data) { var _config = data.config wx.config({ debug: true, appId: _config.appId, timestamp: _config.timestamp, nonceStr: _config.nonceStr, signature: _config.signature, jsApiList: [ 'scanQRCode', ] }) wx.ready(function () { alert('ready') }) wx.error(function (res) { alert('error') }) }) } // 进行扫码测试 function scan() { wx.scanQRCode({ needResult: 1, scanType: ['qrCode'], success: (res) => { console.log('success', res) }, error: (res) => { console.log('error', res) }, fail: (res) => { console.log('fail', res) }, cancel: (res) => { console.log('cancel', res) } }) } </script> 调试流程 1. 直接开啟 test.html,会触发 WeixinJSBridgeReady,可正常调用wx.config及扫码 2. 先开啟 index.html 再点击连结至 test.html,不会触发 WeixinJSBridgeReady,wx.config不会响应 3. 接续2,location.reload() 刷新页面后,可触发 WeixinJSBridgeReady,wx.config正常响应 经过多次调试后发现,页面载入后,如果没有触发 WeixinJSBridgeReady 事件, 调用 wx.config 就会不会响应, wx.ready与wx.error也都不会触发 部份机型手机(OPPO R11, Asus zenfone 5/6),即使刷新页面,也无法触发 WeixinJSBridgeReady及正常调用 wx.config 问题总结 1. 部份Android微信客户端版本,pushState/replaceState后,WeixinJSBridgeReady事件不会触发,wx.config不会有反应 2. 部份手机(oppo, zenfone),在有问题的客户端版本中,location.reload()或刷新会仍无法正常调用wx.config
2020-10-21 - 透过连结跳转至 vue 页面时, wx.config 会失败,是什麼原因?
我们 /h5/ 页面是用vue写的,router 是 hash 模式 透过连结跳转至 /h5/ 页面时, wx.config 会失败,并且没有任何报错,开啟debug也没有任何信息 操作顺序 1. 进入首页 / 2. 点击 <a href='/h5/'>进入公眾号</a> 3. 在 /h5/ 页面, wx.config 失败 将第2步的连结改成 '/h5/#/', wx.config 就会成功 问题: 1. js-sdk 在 config 时,url的部份并不会包含#之后的部份 但是通过跳转时,连结不包含#却会造成 wx.config 失败 2. 直接在外部点击 /h5/ 网址进入公眾号的话,wx.config 不会失败,只有在微信浏览器中跳转才会失败
2020-10-19