详解解决小程序中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 数组排序函数
Aug 20 Javascript
jQuery表单验证插件formValidator(改进版)
Feb 03 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
JS中使用sort结合localeCompare实现中文排序实例
Jul 23 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
jquery实现的蓝色二级导航条效果代码
Aug 24 Javascript
基于JSON数据格式详解
Aug 31 Javascript
angularjs中$http异步上传Excel文件方法
Feb 23 Javascript
jQuery+ajax实现批量删除功能完整示例
Jun 06 jQuery
JavaScript实现栈结构详细过程
Dec 06 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
substr()函数中文版
2006/10/09 PHP
PHP防注入安全代码
2008/04/09 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
python编写暴力破解FTP密码小工具
2014/11/19 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Django自定义manage命令实例代码
2018/02/11 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
英国工具中心:UK Tool Centre
2017/07/10 全球购物
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
硕士研究生个人求职信
2013/12/04 职场文书
九年级家长会邀请函
2014/01/15 职场文书
爱心捐款倡议书
2014/04/14 职场文书
倡议书格式范文
2014/04/14 职场文书
设备管理实施方案
2014/05/31 职场文书
工作目标责任书
2014/07/23 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers