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 相关文章推荐
js使用函数绑定技术改变事件处理程序的作用域
Dec 26 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
Jun 24 Javascript
js对文章内容进行分页示例代码
Mar 05 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
Mar 04 Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 Javascript
浅析JS中对函数function的理解(基础篇)
Oct 14 Javascript
详解jQuery中的事件
Dec 14 Javascript
详解Vue双向数据绑定原理解析
Sep 11 Javascript
layui输入框只允许输入中文且判断长度的例子
Sep 18 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
原生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 cli 方式 在crotab中运行解决
2010/02/08 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
JQuery常见节点操作实例分析
2019/05/15 jQuery
JavaScript中Dom操作实例详解
2019/07/08 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
python 实现堆排序算法代码
2012/06/05 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
暑假实习求职信范文
2013/09/22 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
高中课程设置方案
2014/05/28 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
工作能力自我评价2015
2015/03/05 职场文书
农村老人去世追悼词
2015/06/23 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
python爬虫框架feapde的使用简介
2021/04/20 Python
python如何读取.mtx文件
2021/04/22 Python
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android