详解解决小程序中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 相关文章推荐
写出更好的JavaScript之undefined篇(上)
Nov 22 Javascript
JS动态修改iframe高度和宽度的方法
Apr 01 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
canvas实现图像布局填充功能
Feb 06 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
vue select二级联动第二级默认选中第一个option值的实例
Jan 10 Javascript
加快Vue项目的开发速度的方法
Dec 12 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
基于JavaScript实现简单扫雷游戏
Jan 02 Javascript
vue实现轮播图帧率播放
Jan 26 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
详解python时间模块中的datetime模块
2016/01/13 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
人民教师求职自荐信
2014/03/12 职场文书
简历自我评价优缺点
2015/03/11 职场文书
超市店长竞聘书
2015/09/15 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书