js 判断窗口刷新和关闭,分各种情况

本文介绍了一种使用JavaScript区分网页刷新和关闭的方法,并提供了一个利用隐藏表单字段来判断页面是否因刷新而加载的备选方案。

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

项目要求记录页面的刷新和关闭 次数,在网上查了各种资料,都是用窗口大小的原理来识别,但其实当调用onbeforeunload事件的时候是不会捕捉鼠标的mousemove事件的,获取不到event.clientX事件,而且鼠标一旦离开页面范围,就不能继续获取鼠标的e.clientX位置了,所以我采用了下面的方法,测试可用的:

原理是刷新只记录F5和右键两种方式,其他认为是关闭,关闭只识别alt+f4以及Mac机子的Commad+q其他认为是点击标签或窗口关闭。

刷新调用:onbeforeunload,onunload,onload;

关闭调用:onbeforeunload,onunload;


方法如下:

var currentKeyCode = -1,altkey=false ,rightKey= false,pageY=0,listernType= null;
   $(window).keydown( function(){
       top.altkey = event.altKey;
       top.currentKeyCode = event.keyCode;
   });
   $(document).on("contextmenu" , function(e){
      rightKey = true ;
     
   });
   function isReloadOrClose(event){
      var msg= null ;
      if (currentKeyCode == 116 || rightKey) {
          //116:F5
          if (currentKeyCode == 116){
             msg = "刷新窗口!(F5)" ;
          }
          if (rightKey){
             msg = "右键刷新窗口!" ;
          }
          top.listernType = "reload" ;
      } else{
          msg = "点击关闭窗口" ;
          top.listernType = "close" ;
          if ((altkey || currentKeyCode == 18) || (currentKeyCode == 115) ){
             msg = "关闭窗口!(alt+F4)" ;
          }
          if (currentKeyCode == 91){
             msg = "Mac关闭窗口!(commad)" ;
          }
      }
      currentKeyCode = -1,altkey=false ,rightKey= false,pageY=0,listernType= null;
      return msg;
   }
   window.onbeforeunload = function (event) {   
      return isReloadOrClose(event)
    }
   $(window).unload( function(event){
         alert( "Bye now!" );
    });
网上还有一种识别刷新的方法,没试过,方法如下:

原文是http://www.tedpavlic.com/post_detect_refresh_with_javascript.php

原文给了两个方法,方法一大致翻译如下,

对于大多数浏览器,表单隐藏域的值在浏览器刷新后仍被保留。所以可以给页面添加一个拥有默认值(本例中为空)的表单隐藏域,如果在pageload事件中此默认值未改变,则说明pageload事件不是被刷新触发的,此时可以给这个表单隐藏域设置一个非默认值;若在pageload事件中此表单隐藏域的值被改变了(在非刷新页面导致的pageload事件中改变的),那么说明此时的pageload事件是被刷新触发的。
代码如下,
<html>
<head>

<script language="JavaScript"> <!--
function checkRefresh()
{
if( document.refreshForm.visited.value == "" )
{
// 非刷新,改变默认值
document.refreshForm.visited.value = "1";

// 非刷新情况下的其它应用逻辑
}
else
{
// 刷新页面导致下面代码的执行

// 刷新情况下的其它应用逻辑
}
} -->
</script>

</head>

<body onLoad="JavaScript:checkRefresh();">

<form name="refreshForm">
<input type="hidden" name="visited" value="" />
</form>

</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值