收藏
回答

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



回答关注问题邀请回答
收藏

1 个回答

  • 落枫
    落枫
    03-12

    请问解决了吗?

    03-12
    有用
    回复
登录 后发表内容
问题标签