问题描述
公眾号有部份页面是用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
请问解决了吗?