如何解决小程序中webview页面多层history返回问题?
发布于 5 年前 作者 xia81 4747 次浏览 来自 官方Issues

我微信小程序使用webview 跳转到H5页面 ,在到H5页面1静默授权,使用window.location.href = webUrl 获取到code,然后我点击回退按钮,会返回至页面1而不会返回至小程序的页面,请问这该如何解决,我试过监听新老路由变化,来调wx JDk来跳转,但是 发现页面1跳转到页面2 老路由的name是null参数也是空值, 然后我在到页面2回退到页面1发现 老路由的参数和页面1跳转到页面2 是一致的无法判断,

下面是网上搜索到的一种方法,但是我有些疑惑

比如说我从页面2在跳转到页面3 然后页面3回退到页面2他是不是也会执行wx.miniProgram.navigateBack();这个呢

    window.addEventListener('popstate', (event) => {
      console.log('656+')
      wx.miniProgram.navigateBack()
    })
    if (!cache.getSession('Code')) {
      // 1 在小程序里 2 在微信环境  3 不在微信环境
      if (this.layer.isEnv() != 3 && !query.code && !query.orderId) {
        let abc = encodeURIComponent(window.location.href)
        console.log(abc)
        this.req.wxCode({
          appId: query.appId
        }, res => {
          if (res.appId) {
            let webUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + res.appId +
                '&redirect_uri=' + abc + '&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect'
            console.log(webUrl, cache.getSession('Code'))
            console.log(window.location.href = webUrl)
            window.location.href = webUrl
            cache.setSession('one', '1')
          }
        })
      }
    } else {
      console.log('456')
      history.pushState({
        page: 1
      }, null, window.location.href)
    }

2 回复

看你描述是用这个?

window.location.replace(webUrl)

跳转的时候缓存存个值,页面2判断缓存有那个值就调jssdk跳转可以吗

回到顶部