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的复制网页内容到WORD的实现代码
Feb 16 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
一个简单的瀑布流效果(主体形式自写)
May 27 Javascript
JavaScript实现简单的时钟实例代码
Nov 23 Javascript
jQuery循环滚动新闻列表示例代码
Jun 17 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
Apr 30 Javascript
利用JS实现数字增长
Jul 28 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
Dec 22 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
Javascript ES6中数据类型Symbol的使用详解
May 02 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
Vue Elenent实现表格相同数据列合并
Nov 30 Vue.js
原生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
基于pear auth实现登录验证
2010/02/26 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
新锐科技Java程序员面试题
2016/07/25 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
仓库文员岗位职责
2014/04/06 职场文书
父母对孩子说的话
2014/04/12 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
朋友聚会开场白
2015/06/01 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
合同范本之电脑出租
2019/08/13 职场文书
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers