详解解决小程序中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 相关文章推荐
7款吸引人眼球的jQuery/CSS3特效实例分享
Apr 25 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
js string 转 int 注意的问题小结
Aug 15 Javascript
node.js中的fs.fsync方法使用说明
Dec 15 Javascript
浅谈js中变量初始化
Feb 03 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
Apr 03 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
基于JavaScript实现文字超出部分隐藏
Feb 29 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
Feb 05 Javascript
深入理解react-router 路由的实现原理
Sep 26 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
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应用JSON技巧讲解
2013/02/03 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
python binascii 进制转换实例
2019/06/12 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
Python datetime 如何处理时区信息
2020/09/02 Python
Django配置跨域并开发测试接口
2020/11/04 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
党支部创先争优承诺书
2014/08/30 职场文书
法人委托书范本格式
2014/09/15 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
销售经理岗位职责
2015/01/31 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
风之谷观后感
2015/06/11 职场文书
2016年国陪研修感言
2015/11/18 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android