详解解决小程序中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 EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 Javascript
基于datagrid框架的查询
Apr 08 Javascript
js Dialog 去掉右上角的X关闭功能
Apr 23 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
js实现日期显示的一些操作(实例讲解)
Jul 27 Javascript
手把手教你写一个微信小程序(推荐)
Oct 17 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
Sep 25 Javascript
js实现九宫格抽奖
Mar 19 Javascript
使用Vant完成Dialog弹框案例
Nov 11 Javascript
详解Vue项目的打包方式(生成dist文件)
Jan 18 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
php 全文搜索和替换的实现代码
2008/07/29 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
javascript+mapbar实现地图定位
2010/04/09 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
从零学Python之hello world
2014/05/21 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
Python列表list排列组合操作示例
2018/12/18 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
Python跳出多重循环的方法示例
2019/07/03 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Python实现序列化及csv文件读取
2020/01/19 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python数据正态性检验实现过程
2020/04/18 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
毕业晚会主持词
2014/03/24 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
单位委托函范文
2015/01/29 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
python playwrigh框架入门安装使用
2022/07/23 Python