uni-app:处理微信浏览器中授权微信登录后,无法正常回退问题

一、情景

        在微信浏览器中,需要使用用户微信的code数据,因此采用了"location.href"获取微信授权信息的方式来实现授权登录,并且在重定向页面中获取code,完成操作后需要返回上一页,但是这时候发现采用uni.navigateBack()或者$Router.back()只能回到微信授权的那一页,结果又一次重定向回现在的页面了。

/**
 * H5端微信授权登录
 * getApp().globalData.AppId: 配置的appid
 * redirect_uri: 当前页面或者你想要定向到的地址
 * scope: snsapi_base:静默登录 / snsapi_userinfo:弹出框登录
 */
// #ifdef H5
let tar_url = location.href;
tar_url += location.href.indexOf('?') > -1 ? '&' : '?';
tar_url += 'ori_url=' + location.href;
let uricode = encodeURIComponent(tar_url);
window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='
    + getApp().globalData.AppId + '&redirect_uri=' + uricode
    + '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
// #endif

 

二、定位问题 

       通过打印history和getCurrentPages()比较后才发现,重定向打开页面的页面栈只有1级,因此在uni.navigateBack()中delta不论设置是几层,它就是跳不出去。

 三、解决方案

        1、在事件中返回(如点击确认按钮等):window.history.go(-2);   // -2的层级自己看情况设置

        2、监听浏览器左上角的后退按钮:

/**
 * from(触发返回行为的来源):
 *    'backbutton': 左上角导航栏按钮及安卓返回键;
 *    'navigateBack': uni.navigateBack()方法;
 *     支付宝小程序端不支持返回此字段。
 */
onBackPress(options){
    // console.log(options.from)
    if('触发条件'){
        window.history.go(-2);
        return true;
    }else{
        return false;
    }
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值