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 相关文章推荐
JQuery浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
May 30 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
Sep 03 Javascript
浅谈jQuery before和insertBefore的区别
Dec 04 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
Sep 28 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
vue组件三大核心概念图文详解
May 30 Javascript
vue 解除鼠标的监听事件的方法
Nov 13 Javascript
基于vue--key值的特殊用处详解
Jul 31 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 变量未定义等错误的解决方法
2011/01/12 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
JavaScript函数节流概念与用法实例详解
2016/06/20 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
python pymysql库的常用操作
2020/10/16 Python
如何用Django处理gzip数据流
2021/01/29 Python
意大利网上药房:Farmacia 33
2020/01/27 全球购物
岗位职责的含义
2013/11/17 职场文书
挂职自我鉴定
2014/02/26 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
加入学生会自荐书
2015/03/05 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python