vue中解决微信html5原生ios虚拟键返回不刷新问题


Posted in Javascript onOctober 20, 2020

问题描述:

做微信h5页面时,经过了微信授权才跳转到一级默认路由home.vue中,因此在home页面时在IOS中底部会出现虚拟的返回键,安卓上不会出现。且在IOS点击返回时会跳转到home空白页面不重新加载,但是在安卓机上点击返回键会重新加载。

实现功能:

解决IOS问题(在home页面点返回时路由还是在home页面,并完成重新加载)

分析:

需要在进入页面时加入监听,并在页面离开时移除监听。因为home页面是个滚动列表,所以我采用了keep-alive路由缓存,所以不能在created()和beforeDestroy()生命周期中写,因此我在home.vue中加了组件内的守卫beforeRouteLeave ()在里面移除监听,在activated()中添加监听。
如果页面没有采用路由缓存,则监听事件和移除事件可以在created()和beforeDestroy()这两个生命周期函数中写。

注意:

addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。
它们都接受3个参数:事件名、事件处理的函数和布尔值。
布尔值参数是true,表示在捕获阶段调用事件处理程序;
如果是false,表示在冒泡阶段调用事件处理程序。

相同事件绑定和解除,需要使用共用函数;如果removeEventListener不生效,可以看看这篇文章:https://blog.csdn.net/amyleeYMY/article/details/83382741

//监听返回按钮,重新加载当前页面
window.history.pushState(state, title, utl)//在页面中创建一个 history 实体,直接添加到历史记中。
参数:state:存储一个对象,可以添加相关信息,可以使用 history.state 读取其中的内容。
title:历史记录的标题(目前浏览器不支持)。
url:创建的历史记录的链接。进行历史记录操作时会跳转到该链接。

最终代码:

home.vue

activated(){
  //在页面中创建一个 history 实体,当实体改变时会触发popstate事件,跳转到当前页面,并重新加载当前页面
  window.history.pushState(null, 'ff', document.URL);
  window.addEventListener('popstate',this.reload,true)
 }
 
 //本来在deactivated中写移除事件监听的,但是发现不能移除,可能这个生命周期是在路由跳转完(keep-alive缓存的组件停用时调用)从而找不到那个this了,所以移除监听失败。
 deactivated(){
   window.removeEventListener('popstate',this.reload,true)
 }
 
 //所以采用组件内的路由守卫beforeRouteLeave,成功解决了移除监听事件。
 beforeRouteLeave (to, from, next) {
  // 导航离开该组件的对应路由时调用
  window.removeEventListener('popstate',this.reload,true) //这个一定要写到next()前面
  next()
 }
methods:{
reload(){
  window.location.reload()//重新加载
 }
}

main.js

import {Component} from "vue-property-decorator";
Component.registerHooks([
 'beforeRouteLeave',
]);

就这样成功的解决IOS返回不刷新问题~欢迎小伙伴来交流

到此这篇关于vue中解决微信html5原生ios虚拟键返回不刷新问题的文章就介绍到这了,更多相关微信html5原生ios虚拟键返回不刷新内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
Mar 26 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
小议JavaScript中Generator和Iterator的使用
Jul 29 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
jquery读写cookie操作实例分析
Dec 24 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
Dec 08 Javascript
JavaScript中如何判断一个值的类型
Sep 15 Javascript
Node.js搭建小程序后台服务
Jan 03 Javascript
详解React之父子组件传递和其它一些要点
Jun 25 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
原生js实现俄罗斯方块
Oct 20 #Javascript
React实现评论的添加和删除
Oct 20 #Javascript
基于JavaScript实现简单抽奖功能代码实例
Oct 20 #Javascript
微信小程序使用前置摄像头拍照
Oct 22 #Javascript
jQuery实现可以计算进制转换的计算器
Oct 19 #jQuery
jQuery实现计算器功能
Oct 19 #jQuery
vue3为什么要用proxy替代defineProperty
Oct 19 #Javascript
You might like
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
javascript 特殊字符串
2009/02/25 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
《难忘的泼水节》教学反思
2014/02/27 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
禁止酒驾标语
2014/06/25 职场文书
儿园租房协议书范本
2014/12/02 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs