一、情景

在微信浏览器中,需要使用用户微信的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;}
}

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

  1. uniapp微信浏览器H5授权微信登录

    1.准备一个触发微信登录的按钮 <button class="wechat-logo" @click="getWeChatCode">微信授权登录& ...

  2. 微信浏览器中的微信支付,JSAPI支付,开发流程、常见问题

    微信支付有两种使用场景,一种是可以在微信之外的浏览器(如UC浏览器.手机自带浏览器等)中使用,在微信外部唤醒微信进行支付:还有一种是在微信自带内置浏览器中使用,比如微信公众号里边的支付.给客户在微信上 ...

  3. html2canvas 在ios 13.4.x 、 13.5.x 微信浏览器中失效无反应

    如题:html2canvas 在ios 13.4.x . 13.5.x 微信浏览器中失效无反应 解决方法: html2canvas 回退到rc.4版本后可以了. 参考 微信开放社区

  4. php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...

    手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...

  5. 解决安卓微信浏览器中location.reload 或者 location.href失效的问题

    解决安卓微信浏览器中location.reload 或者 location.href失效的问题 参考文章: (1)解决安卓微信浏览器中location.reload 或者 location.href失 ...

  6. js判断是否在微信浏览器中打开

    js判断是否在微信浏览器中打开 function is_weixn(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroM ...

  7. 在微信浏览器中 location.reload() 不刷新解决方案(直接调用方法)

    1.问题 在微信浏览器中,需要时刷新当前页面. 正常情况下我们直接使用 location.reload 方法来刷新. 2.解决方法 function realod(){var {search,href ...

  8. 关于安卓手机在微信浏览器中无法调起相机的原因

    最近功在做公司的一个项目,遇到安卓手机在微信浏览器中更换头像无法调起相机的问题,特来此记录一下. 1.微信没有相机权限,开启就行了. 2.〈input type="file" ac ...

  9. Js判断是否在微信浏览器中打开和微信版本号

    一.判断微信版本号 var wechatInfo = navigator.userAgent.match(/MicroMessenger\\/([\\d\\.]+)/i) ; if( !wechatI ...

最新文章

  1. 论文被拒,项目被砍?斯坦福最惨在读博士教你如何直面失败
  2. Python+PyQt 数据库基本操作
  3. 双向链表实现电话簿C++代码实现
  4. 如何使用区块链技术进行项目开发
  5. mysql-5.7.37-winx64解压版安装超详细图文教程
  6. 编译linux tq2440,QT4.8.2在TQ2440开发板上的移植(一)--编译和安装
  7. 免费 | 开源操作系统年度盛会最新日程曝光,邀您一同开启烧脑模式!
  8. 蚂蚁爬绳问题 java_趣味数学网
  9. python语言程序设计实践教程陈东_20193323实验三《Python程序设计》实验报告
  10. Eclipse修改代码字体
  11. 普通电机、步进电机、伺服电机、舵机区别?
  12. 014_驱动模块传参数
  13. 第一章 爬虫(认识网络爬虫)
  14. Oracle存储过程实现X日均线计算
  15. Javascript验证信用卡号、信用卡类型(最全最新)
  16. 闲聊HTTP/2.0
  17. JS控制字体大小中、设为首页、收藏本站功能、超链接去掉颜色
  18. java工程师主要是做什么的?我来聊聊如何提高自身的工作水平
  19. 从新建工程开始使用C++开发单片机(以STM32为例):一、项目介绍
  20. Linux系统-安装显卡GPU驱动的两种方式

热门文章

  1. js图片编辑器插件Filerobot
  2. Linux常用的三种上传与下载工具介绍
  3. android指纹识别真机,就等魅蓝了,全面屏时代指纹解锁该放在哪才不尴尬
  4. 中科大郑烇、杨坚《计算机网络》课程 第一章笔记
  5. Android java.lang.IllegalArgumentException(...contains a path separator)
  6. 计算机音乐数字乐谱桃源恋歌,桃源恋歌钢琴简谱-数字双手-GARNIDELIA
  7. centos7当数据盘到达百分之80%后自动清理日志的shell脚本
  8. Node获取微信JSSDK签名测试号案例
  9. 善用 final 关键字,提升编码内功的一大捷径
  10. 谷歌地图的级别与对应比例尺