详解解决小程序中webview页面多层history返回问题


Posted in Javascript onAugust 20, 2019

小程序开发中遇到的问题:小程序中嵌套了一个webview页面,webview页面中有静默授权(A1页面静默授权后重定向到A2页面),点小程序原生的返回按钮会返回到A1页面,然后页面就会反复静默授权

预期表现:点小程序原生的返回按钮后返回到小程序上个页面

解决方案:通过history.pushState添加历史记录名目,history.onpopstate监听历史记录条目发生变化时,调用小程序APIwx.navigateBack

window.addEventListener('popstate', (event) => {
  wx.miniProgram.navigateBack();
});
const code = getSearch('code'); // 伪代码,获取查询参数
if (!code) { // 页面A1
  if (isWeixin()) {
    // 微信环境
    const redirectUrl = window.location.href + '&code=1';
    window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize' + '?appid=' + appId +
    '&redirect_uri=' + encodeURIComponent(redirectUrl) +
    '&response_type=code&scope=snsapi_userinfo' +
    '#wechat_redirect'; // 静默授权伪代码
  } else {
    alert('当前不是微信环境');
  }
} else { // 页面A2
  history.pushState({page: 1}, null, window.location.href);
}

刚开始想的解决办法是用localStorage,跳转到A2时存储一个值,返回到A1时获取这个值,如果有值就清除这个值并且回退到小程序页面。听起来似乎也可行,但小程序的缓存和微信的缓存是同步的,如果在微信环境中直接访问A1页面,重定向到A2会存值,如果直接关闭页面,不会被清除,那么在小程序中访问时就直接回退了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
代码获取历史上的今天发生的事
Apr 11 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
详解WordPress开发中get_current_screen()函数的使用
Jan 11 Javascript
JavaScript字符串常用的方法
Mar 10 Javascript
jquery表单验证插件formValidator使用方法
Apr 01 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
高性能的javascript之加载顺序与执行原理篇
Jan 14 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 Javascript
JavaScript函数柯里化
Nov 07 Javascript
JavaScript使用表单元素验证表单的示例代码
Aug 20 #Javascript
vue悬浮可拖拽悬浮按钮的实例代码
Aug 20 #Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
Aug 20 #Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
Aug 20 #Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
Aug 20 #Javascript
JS中的算法与数据结构之队列(Queue)实例详解
Aug 20 #Javascript
JS中的算法与数据结构之栈(Stack)实例详解
Aug 20 #Javascript
You might like
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
CI框架中zip类应用示例
2014/06/17 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
js控制div及网页相关属性的代码
2009/12/19 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python3.7 sys模块的具体使用
2019/07/22 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
德国网上药房:Apotal
2017/04/04 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
建筑专业自荐信
2013/10/18 职场文书
语文教育专业应届生求职信
2013/11/23 职场文书
运动会致辞稿50字
2014/02/04 职场文书
研究生求职自荐书
2014/06/23 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
建筑节能汇报材料
2014/08/22 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript