最近的一个 Webapp 里面有如下的跳转逻辑

initData(){
  document.title = '粉丝红包'
  this.adShow = false
  this.RedPackRank()
  // openid检测
  // 没有 需要重新跳转获取
  if (!this.$route.query.openid) {
    const currentURL = encodeURIComponent(window.location.href)
    let c = `${window.location.origin}${NEW_GET_OPENID}?appid=${
      this.appId
    }&url=${currentURL}`
    window.location = c
    return
  }
  // 有 Openid 继续向下获取进一步的数据
}

这个函数起初我是在 mounted 生命周期中调用的,结果发现跳转之后虽然链接上面带了 openid 却还是无法继续往下执行。整理一下问题

  1. 跳转成功了
  2. mounted 只触发了第一次 未跳转的时候 后续的跳转没有进生命周期

后来经过反复勘察,发现微信这坑逼系统在发现你使用后台跳转到时候,直接帮你缓存了跳转之前的整个页面,所以你的整个 SPA 跳转回来就进入了静止状态,根本无法再次触发生命周期,

解决办法

通过 Watch $route 来监听页面的 URL 变化 从而达到第二次激活 initData 方法

 watch: {
    $route() {
      this.initData()
    }
  }

微信这死妈烂货就喜欢搞这些东西 操你妈的