H5退出时所遇到的问题:

1。按返回键或anroid手机的物理返回键时,都不走destroy方法。

2。按物理返回键,添加popstate监听时,

(1)历史记录要准确,否则会执行多次监听方法

(2)进入子页面,监听没有及时移除,子页面也被监听了。

最近新做了个项目,需要在首页destroy的时候,调用接口更新数据,但是按返回键或anroid手机的物理返回键时,并不走destroy方法。

1。当按页面的返回箭头时的处理:

    backReturn () {this.$router.go(-1)this.$refs.myEnergy.destroySelf()},

按页面的返回箭头时,调用子组件的更新数据的方法;

2。按anroid物理返回键时,在网上查了很多资料,都是要添加监听,而且是当窗口历史记录改变时的监听,需要将历史记录一下。

我首先采用的方法:

mounted(){if (window.history && window.history.pushState) {history.pushState(null, null, document.URL);window.addEventListener('popstate', this.goBack, false);}
},

但采用这种方法存在一些问题,当我点击其他按钮跳转到子页面再返回来,再按退出键时,监听方法会跑2次。

采用下面的方法可以解决这个跑2次的问题:

  mounted () {if (window.history && window.history.pushState) {// history.pushState(null, null, document.URL)this.pushHistory()window.addEventListener('popstate', this.backListener, false)}},beforeDestroy () {console.log('beforeDestroy', '3333')window.removeEventListener('popstate', this.backListener)},methods: {pushHistory () {var state = {title: 'title',url: '#'}window.history.pushState(state, null, '#')},backListener () {alert('77777')this.backReturn()},backReturn () {this.$router.go(-1)this.$refs.myEnergy.destroySelf()window.removeEventListener('popstate', this.backListener)},}

这种方法虽然能解决上面所说的跑2次的问题,但当按页面的返回箭头时,backReturn方法会走2次。一次按钮事件,一次监听,而且进入子页面,子页面也被添加了监听(虽然在destroy之前把监听给移除了,但由于子页面的created方法运行在父页面的beforeDestroy方法之前,所以子页面也被监听了。

最终解决:

采用监听onpagehide页面隐藏事件来处理。代码如下:

mounted () {//挂载完成后,判断浏览器是否支持popstateif (window.history && window.history.pushState) {window.addEventListener('pagehide', this.backListener, false)}},// 页面销毁时,取消监听。否则其他vue路由页面也会被监听
beforeDestroy () {window.removeEventListener('pagehide', this.backListener)},methods: {// 将监听操作写在methods里面,removeEventListener取消监听内容必须跟开启监听保持一致,所以函数拿到methods里面写backListener () {this.$refs.myEnergy.destroySelf()},
}

VUE 物理返回键的处理相关推荐

  1. Vue监听浏览器前进后退物理返回键(浏览器自带的)

    Vue监听浏览器前进后退物理返回键 在某些需求下要监听用户物理按键. popstate事件只会在页面不跳转的情况下,路由发生变化触发. created() { // 创建vm实例后执行// 浏览器控制 ...

  2. 混合开发监听安卓手机物理返回键

    混合开发监听安卓手机物理返回键 在用h5做混合开发过程中由于有个考试考试页面,中途不能退出,退出要添加确认操作,所以需要监听手机的返回操作,不让用户直接通过返回键返回 目前了解到混合开发中有两种方式监 ...

  3. html5plus 判断手机物理返回键

    html5plus 判断物理返回键 plus.key.addEventListener('backbutton', handleBack); // callback 参数要传一个functionvar ...

  4. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键

    本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){         ...

  5. popwindow 焦点问题,物理返回键截获,软键盘监听问题

    首先是setFocusable这个方法,获取焦点:如果不获取焦点,那么popwindow中的控件都没有办法获取焦点和事件响应问题. 如果获取焦点,那么popwindow就会拦截屏幕上的点击触摸事件以及 ...

  6. 通过手机物理返回键实现弹出层的隐藏

    通过手机物理返回键实现弹出层的隐藏 <template><div class="popup"><h1 @click="popup" ...

  7. JavaScript监听手机物理返回键的两种解决方法

    JavaScript监听手机物理返回键的两种解决方法 参考文章: (1)JavaScript监听手机物理返回键的两种解决方法 (2)https://www.cnblogs.com/xzzzys/p/8 ...

  8. unity调用安卓手机物理返回键和home键

    使用unity制作游戏时,有时候需要在游戏中触发手机的物理返回键和home键,下面在update方法中每帧监听是否按下了该键,然后写入自己要调用的方法 using System.Collections ...

  9. JS监听手机物理返回键(及IOS微信端的bug)

    需求场景 有一天,头儿给我提了这样一个需求: 无论页面如何跳转,在首页的时候再按返回,直接退出... 解决思路 关闭网页好说,由于我们的项目是微信公众号,直接调用微信浏览器的内置函数: WeixinJ ...

最新文章

  1. bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...
  2. 谈谈几个 Spring Cloud 常见面试题及答案
  3. mysql中数据表如何关联_mysql 如何导入/导出2个关联表中的数据
  4. 011_Cascader级联选择器
  5. 创建Invoice和公司间Invoice
  6. [转]进程,线程和多线程
  7. React 相关资料
  8. SecureCRT常用的使用技巧
  9. Kotlin 的 Array 转 List
  10. C++中虚函数、纯虚函数、普通函数三者的区别
  11. html 变量类型强制转换,html、js前台数据传到后台,spring复杂类型转换
  12. Maya+3dsMax三维建模
  13. 《ASCE1885的源码分析》の简单的进程封装类
  14. 2012 r2 万能网卡驱动_MultiBeast | 黑苹果的驱动精灵简单使用解读
  15. 嵌入式系统中常用的通信接口技术
  16. 墓碑上的字符C语言,墓碑上的故显考、故显妣、先考、先妣都是什么意思
  17. 计算机强制关机后桌面图标不见了,强制关机后桌面上的图标全不见了怎么办
  18. 2021年计算机能力挑战赛真题总结C++版
  19. 神经机器翻译中的曝光偏差,幻觉翻译与跨域稳定性
  20. 爱普生发票打印机 每次连续打印发票,都跳页,中间一张空白

热门文章

  1. Logistic-tent混沌系统matlab
  2. 《C语言及程序设计》实践参考——学生成绩统计
  3. PCIe设备在一个系统中是如何发现与访问的
  4. 杭州电子科技大学计算机科学与技术专业排名,杭州电子科技大学计算机科学与技术研究生专业排名...
  5. Linux如何ping本机IP,Linux ping6 本地ipv6地址无效的参数
  6. 闭式系统蒸汽管径推荐速度_蒸汽管道的设计选型
  7. 当动作捕捉遇上圣诞节,原来如此有趣
  8. android 日历开发教程,android 开发教程之日历项目实践(三)
  9. 【STM32】HAL库 SPI DMA UART驱动开发
  10. 易周金融观点:遏制NFT金融化等打下监管良基