详解解决小程序中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 相关文章推荐
jQuery学习笔记 获取jQuery对象
Sep 19 Javascript
JS正则验证邮箱的格式详细介绍
Nov 19 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
5个JavaScript经典面试题
Oct 13 Javascript
jQuery使用drag效果实现自由拖拽div
Jun 11 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
浅析BootStrap栅格系统
Jun 07 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
JS实现吸顶特效
Jan 08 Javascript
微信小程序实现点赞业务
Feb 10 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中函数rand和mt_rand的区别比较
2012/12/26 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
php构造函数的继承方法
2015/02/09 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python函数式编程
2017/07/20 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
离婚协议书标准格式
2014/10/04 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
担保书怎么写 ?
2019/04/22 职场文书
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技