详解解决小程序中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 相关文章推荐
juqery 学习之四 筛选查找
Nov 30 Javascript
JS下拉缓冲菜单示例代码
Aug 30 Javascript
动态加载jquery库的方法
Feb 12 Javascript
JavaScript中length属性的使用方法
Jun 05 Javascript
JQuery悬停控制图片轮播——代码简单
Aug 05 Javascript
JavaScript实现文字跟随鼠标特效
Aug 06 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
搭建vue开发环境
Jul 19 Javascript
JS闭包经典实例详解
Dec 20 Javascript
node.js ws模块搭建websocket服务端的方法示例
Apr 25 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
Jul 09 Javascript
在vscode 中设置 vue模板内容的方法
Sep 02 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实现异步调用方法研究与分享
2011/10/27 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
smarty简单入门实例
2014/11/28 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Python生成词云的实现代码
2020/01/14 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
数控技术专业推荐信
2013/11/01 职场文书
幼儿教师自我鉴定
2013/11/02 职场文书
工作的心得体会
2013/12/31 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
五好家庭申报材料
2014/12/20 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
python中 Flask Web 表单的使用方法
2022/05/20 Python