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 相关文章推荐
javascript 全等号运算符使用说明
May 31 Javascript
location.search在客户端获取Url参数的方法
Jun 08 Javascript
JQuery中each()的使用方法说明
Aug 19 Javascript
仿百度的关键词匹配搜索示例
Sep 25 Javascript
JavaScript实现的伸展收缩型菜单代码
Oct 14 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
Vue.js教程之计算属性
Nov 11 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
Feb 19 Javascript
详解Angular2中Input和Output用法及示例
May 21 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
全文搜索和替换
2006/10/09 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
JavaScript实现区块链
2018/03/14 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
Python中用Decorator来简化元编程的教程
2015/04/13 Python
基于Python os模块常用命令介绍
2017/11/03 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
django解决订单并发问题【推荐】
2019/07/31 Python
浅谈python3中input输入的使用
2019/08/02 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
益模软件Java笔试题
2012/03/27 面试题
离职证明格式样本
2015/06/12 职场文书
高三教师工作总结2015
2015/07/21 职场文书
大学体育课感想
2015/08/10 职场文书
工程主管竞聘书
2015/09/15 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
用Python简陋模拟n阶魔方
2021/04/17 Python
python基础学习之递归函数知识总结
2021/05/26 Python
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技
MongoDB支持的数据类型
2022/04/11 MongoDB
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python