您好,欢迎来到百万美食网。
搜索
您的当前位置:首页vue-router history模式下的微信分享小结

vue-router history模式下的微信分享小结

来源:百万美食网


这个问题是由于IOS微信浏览器下,有着下面的“特性”:

把第一次打开的页面叫做进入页;把前端路由若干次跳转(通过pushState/replaceState改变url)之后,当前打开的页面叫做当前页。

微信验签使用的url(当前网页的URL,不包含#及其后面部分),在Android下取的是当前页url,在IOS下取的是进入页的url(支付目录也是一样)

知道了这个,可以采取下面的办法来解决:

使用vuex保存进入页的URL,每次wx.config需要的参数,都使用进入页的URL来进行签名

至此,微信分享签名错误的问题解决了,但分享还是不正常:# 自定义分享不生效

度娘谷歌了一番,大概有下面几种办法

  • 使用hash模式
  • 做成多页应用,每个页面都是进入页
  • 所有需要自定义分享的页面使用<a>替换<router-link>,跟2类似,使所有自定义分享页面变成进入页
  • 对于我们的业务场景来说,hash模式不能保证历史链接的可用性,多页/<a>跳转都是以牺牲一定体验性为代价。

    经过多番尝试,最后发现用下面的方法勉强解决了问题:

    // 进入页面,控制自定义分享前,把当前页URL替换成进入页的URL(保证自定义分享正常)
    this.setCurrentPage(location.href)
    window.history.replaceState({}, document.title, this.landingPage)
    wx.config()
    wx.ready()
    
    //...
    
    // 离开当前页时,还原当前页的URL(保证返回正常)
    beforeRouteLeave(to, from, next) {
     window.history.replaceState({}, '', this.currentPage)
     next()
    }
    
    

    Copyright © 2019- bwgh.cn 版权所有

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务