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 相关文章推荐
原型方法的不同写法居然会影响调试的解决方法
Mar 08 Javascript
10个新的最有前途的JavaScript框架
Mar 12 Javascript
JavaScript 空位补零实现代码
Feb 26 Javascript
javascript 弹出层组件(升级版)
May 12 Javascript
导航跟随滚动条置顶移动示例代码
Sep 11 Javascript
javascript制作的网页侧边弹出框思路及实现代码
May 21 Javascript
node.js中的fs.closeSync方法使用说明
Dec 17 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
ajax接收后台数据在html页面显示
Feb 19 Javascript
AngularJS中下拉框的高级用法示例
Oct 11 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
May 14 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
转换中文日期的PHP程序
2006/10/09 PHP
PHP 开发工具
2006/12/06 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
纯javascript版日历控件
2016/11/24 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
python3中的md5加密实例
2018/05/29 Python
python实现KNN分类算法
2019/10/16 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
超市仓管员岗位职责
2014/04/07 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
学子宴致辞大全
2015/07/27 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android