详解解决小程序中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 相关文章推荐
JqueryMobile动态生成listView并实现刷新的两种方法
Mar 05 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
javascript使用call调用微信API
Dec 15 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
jquery——九宫格大转盘抽奖实例
Jan 16 Javascript
简单实现bootstrap选项卡效果
Feb 08 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 Javascript
深入探究angular2 UI组件之primeNG用法
Jul 26 Javascript
vue数组对象排序的实现代码
Jun 20 Javascript
vue中的数据绑定原理的实现
Jul 02 Javascript
vue和better-scroll实现列表左右联动效果详解
Apr 29 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实现用户认证及管理完全源码
2007/03/11 PHP
基于php iconv函数的使用详解
2013/06/09 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
Vue绑定内联样式问题
2018/10/17 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
python的re正则表达式实例代码
2018/01/24 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
班长岗位职责
2013/11/10 职场文书
文秘大学生求职信
2014/02/25 职场文书
一岗双责责任书
2014/04/15 职场文书
效能监察建议书
2014/05/19 职场文书
股东授权委托书范本
2014/09/13 职场文书