js判断浏览器是刷新还是关闭

JS窗口关闭提醒
本文介绍了一个简单的JavaScript脚本,该脚本能够在用户尝试关闭或刷新页面时弹出警告消息。此功能有助于提醒用户保存未完成的工作或确认是否离开当前页面。

 <SCRIPT language=JavaScript>
<!--
window.onbeforeunload = function(){
 if(event.clientX>document.body.clientWidth){
    alert('浏览器关闭');  
 }else{
  alert('浏览器刷新');
 }
};
-->
</SCRIPT>

 

原文地址:http://bbs.51js.com/viewthread.php?tid=81730

以下是几种使用 JavaScript 判断浏览器刷新还是关闭的方法: ### 方法一:基于时间差判断 通过比较页面卸载前记录的时间和重新加载页面的时间差来判断刷新还是关闭。当时间差大于一定值(如 3000ms)时,认为是关闭浏览器;时间差较小时,认为是刷新浏览器。 ```javascript const userStore = useUserStore(); function isLoggedOut() { try { const storedUnloadTime = localStorage.getItem('beforeunload_time'); const beforeUnloadTime = storedUnloadTime ? JSON.parse(storedUnloadTime) : 0; const load_time = new Date().getTime(); const timeDifference = load_time - (Number.isFinite(beforeUnloadTime) ? beforeUnloadTime : 0); if (timeDifference > 3000) { // 关闭浏览器 userStore.logout(); } else { // 刷新浏览器 } console.log(`页面卸载前与重新加载时间差: ${timeDifference}ms`); } catch (e) { console.log(e); } } isLoggedOut(); ``` 这种方法的原理是,关闭浏览器时从页面卸载到重新打开通常会有较长的时间间隔,而刷新页面的时间间隔相对较短 [^2]。 ### 方法二:监听 `beforeunload` 和 `unload` 事件并计算时间差 通过监听 `beforeunload` 事件记录离开页面的初始时间,再监听 `unload` 事件计算两次事件的时间差,根据时间差判断是选项卡关闭还是页面刷新。通常小于等于 5ms 为选项卡关闭,大于 5ms 一般为页面刷新或导航。 ```javascript // 定义全局变量记录时间戳 let startTime = 0; let unloadTime = 0; // 监听页面卸载前的事件 window.addEventListener('beforeunload', function (event) { // 记录离开页面的初始时间 startTime = new Date().getTime(); }); // 监听页面完全卸载的事件 window.addEventListener('unload', function () { // 计算两次事件的时间差 unloadTime = new Date().getTime() - startTime; // 根据时间差判断行为类型 if (unloadTime <= 5) { // 通常小于等于5ms为选项卡关闭 handleTabClose(); } else { // 大于5ms一般为页面刷新或导航 handlePageRefresh(); } }); // 关闭选项卡时的处理函数 function handleTabClose() { // 示例:向后台发送关闭请求 axios.get('http://127.0.0.1:7001/') } // 页面刷新时的处理函数 function handlePageRefresh() { // 示例:刷新时执行的逻辑 console.log('页面正在刷新...'); } window.onbeforeunload = function () { beginTime = new Date().getTime(); }; ``` 这种方法利用了浏览器关闭选项卡和刷新页面时,`beforeunload` 和 `unload` 事件之间的时间差不同的特点 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值