vue router 关闭当前页_vue-router在history模式下的微信分享

本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发、Nodejs、Python、Linux、IT资讯等板块.

在vue-router模式为history的情况下, 由于IOS微信浏览器在验证微信jssdk签名时,需要的URL是第一次进入该应用时的URL, 并不是当前页面的URL, 所以这里需要针对IOS微信浏览器作特殊处理.

1. vuex中存储第一次进入的URL

[SET_WX_JS_URL]: (state, url) => {
    // 设置进入微信时jssdk所需的URL
    state.jsUrl = url
  }

2.在路由的全局前置守卫beforeEach 中提交第一次进入时的URL至vuex

router.beforeEach((to, from, next) => {
  if (!store.state.jsUrl) {
    // 记录第一次进入的URL
    store.commit(SET_WX_JS_URL, document.URL)
  }
  next()
})
export default router

3. 设置 获取微信jssdk签名sign时传递的URL

let jsUrl = '' // 验证签名所需URL
let shareUrl = location.href.split('#')[0] // 分享链接的URL
if (isIos && isWechat) {
  // 微信浏览器&&苹果设备, 取出记录的第一次访问的URL
  jsUrl = encodeURIComponent(store.state.jsUrl.split('#')[0])
} else {
  jsUrl = encodeURIComponent(location.href.split('#')[0]) // 当前页面URL
}

4. 获取签名时使用jsUrl, 配置分享内容的链接时使用shareUrl (当前页面的真实地址)

let payload = {
      url: jsUrl,
      jsApiList: ''
    }
    api.loadWxShare(payload).then(signPackage => {
      // 传递jsUrl, 向服务器端请求jssdk签名
      wx.config({
        debug: false,
        appId: signPackage.appId,
        timestamp: signPackage.timestamp,
        nonceStr: signPackage.nonceStr,
        signature: signPackage.signature,
        jsApiList: signPackage.jsApiList
      })
      wx.ready(function () {
        wx.onMenuShareTimeline({
          title: '', // 分享标题
          desc: '', // 分享描述
          link: shareUrl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
          imgUrl: '', // 分享图标
          type: '', // 分享类型,music、video或link,不填默认为link
          dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
          success: function () {
          },
          cancel: function () {
          }
        })
      })
      wx.error(function (res) {
      })
    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值