Vue3 - [兼容PC和手机H5] 详细监听浏览器刷新 / 关闭 / 前进后退事件,用户点击关闭和刷新页面前 “拦截“ 操作并弹出提示框(实时监听用户关闭或刷新网页,触发时文字提醒并执行自定义操作)

147 篇文章 ¥9.90 ¥99.00
本文介绍了在 Vue3 项目中如何监听浏览器的刷新、关闭、前进和后退事件,并在这些事件触发时弹出提示框,允许用户在离开或刷新页面前执行自定义操作。内容包括局部和全局监听的实现方法,适用于PC和手机H5页面,同时提供了注意事项和SEO相关的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

如果您需要 Vue2 版本,请访问 这篇文章。

实现了在 vue3 | nuxt3 网站项目中,实时监听浏览器的关闭、刷新、前进后退等,当被点击时阻止默认行为和弹出文字提示框(告知用户),当用户确认离开页面时执行一个函数或一段代码等!完美兼容所有浏览器,支持电脑 PC 网页、手机移动端 H5 页面。


如下图所示,支持给 “局部(单独页面)” 设置监听,也可以 “全局(全部页面)” 设置,

示例代码干净整洁,无任何乱七八糟的代码

在这里插入图片描述

局部监听(源码)

您可以仅给 “某个单独的页面” 设置监听,也可以让整个网站全局监听。

### Vue.js 监听浏览器刷新事件的实现方式 在 Vue.js 中,监听浏览器刷新事件通常通过 `beforeunload` 事件来实现。以下是几种常见的实现方法: #### 方法一:使用 `beforeunload` 事件 可以在组件生命周期钩子 `mounted` `destroyed` 中分别绑定移除 `beforeunload` 事件监听器。 ```javascript export default { mounted() { window.addEventListener('beforeunload', this.handleBeforeUnload); }, beforeDestroy() { window.removeEventListener('beforeunload', this.handleBeforeUnload); }, methods: { handleBeforeUnload(event) { event.preventDefault(); event.returnValue = ''; // 兼容某些浏览器 console.log('页面即将刷新关闭'); } } }; ``` 此方法可以捕获到用户操作行为执行相应的逻辑[^2]。 --- #### 方法二:结合 `performance.navigation.type` 判断刷新关闭 为了进一步区分是页面刷新还是关闭,可以利用 `performance.navigation.type` 属性进行判断。 ```javascript if (performance.navigation && performance.navigation.type === 1) { console.log('这是一个刷新页面操作'); // 页面刷新 } else { console.log('这是其他类型的导航操作'); // 页面加载其他情况 } ``` 需要注意的是,在现代浏览器中,`performance.navigation` 已被废弃,建议改用 `PerformanceNavigationTiming` 接口替代[^1]。 --- #### 方法三:全局注册事件监听器 如果希望在整个应用范围内监听刷新事件,可以直接在入口文件(如 `main.js` `App.vue` 的根实例)中设置监听器。 ```javascript // main.js window.addEventListener('beforeunload', function (event) { const confirmationMessage = '您确定要离开吗?'; event.returnValue = confirmationMessage; return confirmationMessage; }); ``` 这种方式适用于不需要动态解绑的情况,但如果需要更灵活的控制,则推荐在具体组件中处理[^4]。 --- #### 方法四:基于路由守卫增强体验 当涉及特定路由下的刷新检测,可结合 Vue Router 提供的导航守卫功能完成定制化需求。 ```javascript router.beforeEach((to, from, next) => { if (from.name !== to.name) { console.log('切换到了新的路由'); } else { console.log('可能发生了页面刷新'); } next(); }); ``` 这种方法特别适合用于复杂业务场景下对用户交互行为的精细化管理[^5]。 --- ### 注意事项 - 使用 `beforeunload` 事件需注意兼容性问题以及返回值的要求。 - 如果依赖端手段难以满足实际需求,还可以考虑配合服务端记录状态等方式补充完善逻辑。 - 对于老旧 API 如 `performance.navigation` 应及迁移到最新标准以保障跨平台稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王二红

请作者喝杯咖啡 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值