javascript判断网页是关闭还是刷新


Posted in Javascript onSeptember 12, 2015

原理就是通过离开页面行为时间onunload触发时间去检测此时的浏览器的窗口大小,根据大小由此判断用户是刷新,跳转或是关闭行为程序

 代码如下 

window.onunload = function(){    
    var a_n = window.event.screenX - window.screenLeft;    
    var a_b = a_n > document.documentElement.scrollWidth-20;    
    if(a_b && window.event.clientY< 0 || window.event.altKey){    
         alert('关闭页面行为'); 
    }else{ 
         alert('跳转或者刷新页面行为');   
      } 
}

用浏览器右上角的关闭按钮时好用,但在选项卡上关闭和在任务栏上关闭,这个方法就不作用了

js标签只有onloadonunloadonbeforeunload事件,而没有onclose事件。

不管页面是关闭还是刷新都会执行onunload事件。

如何捕捉到页面关闭呢?
页面加载时只执行onload
页面关闭时只执行onunload
页面刷新时先执行onbeforeunload,然后onunload,最后onload。

这样我们可以在onbeforeunload中加一个标记,在onunload中判断该标记,即可达到判断页面是否真的关闭了
更完整的兼容ff

 代码如下 

<mce:script type="text/javascript"><!--
    function close(evt) //author: sunlei
    {  
      var isIE=document.all?true:false;
      evt = evt ? evt :(window.event ? window.event : null);
      if(isIE){//IE浏览器
        var n = evt.screenX - window.screenLeft;
        var b = n > document.documentElement.scrollWidth-20;
        if(b && evt.clientY<0 || evt.altKey){
          //alert("是关闭而非刷新");
          window.location.href="../include/logout.php";
        }
        else{
          //alert("是刷新而非关闭");
          return false;
        }
      }
      else{//火狐浏览器
        if(document.documentElement.scrollWidth!=0)
        {
          //alert("是刷新而非关闭");
          //window.location.href="report_list.php?ss=1";
          return false;
          
        }
        else{
          alert("是关闭而非刷新");
          //window.location.href="repost_list.php?ss=0";
          //alert("bbbbbbb");
        }
      }
    }
// --></mce:script>
<BODY onunload="close(event);">

上面的方法没办法判断多选项卡的浏览器,如360,ie8这种,下面再看

 代码如下 

function CloseOpen(event) { 
     if(event.clientX<=0 || event.clientY<0) { 
       //获取当前时间
      var date=new Date();
      //将date设置为过去的时间
      alert("关闭网页");
      date.setTime(date.getTime()-10000);
      //将userId这个cookie删除
      document.cookie="zhuangtao;expire="+date.toUTCString();
      document.cookie="quanxianzifucuan;expire="+date.toUTCString();
      document.cookie="quanxian;expire="+date.toUTCString();
     s0 += "关闭窗口!"; sw = 1;
      onbeforeunload();
      // window.event.returnValue = '关闭浏览器将退出系统.';
     } 
     else 
     { 
        alert("刷新或离开"); 
     } 
 } 
       
        var currentKeyCode = -1;

  function document.onkeydown() { // 本窗口的所有下属页面都必须含有本函数

    top.currentKeyCode = event.keyCode;
  }

  function onbeforeunload(){
  
   var sw = 0, s0 = "";
    if (currentKeyCode == 116) 
    {
      s0 += "刷新窗口!(F5)";
    }
    else 
    {
      if ((event.altKey)&&(currentKeyCode == 115)) 
      {
         s0 += "关闭窗口!(alt+F4)"; sw = 1;
          //获取当前时间
          var date=new Date();
          //将date设置为过去的时间
         alert("关闭窗口");
          date.setTime(date.getTime()-10000);
          //将userId这个cookie删除
          document.cookie="zhuangtao;expire="+date.toUTCString();
          document.cookie="quanxianzifucuan;expire="+date.toUTCString();
          document.cookie="quanxian;expire="+date.toUTCString();
      }
      else 
      {
        if ((event.clientX > 0)&&(event.clientX < document.body.clientWidth)) 
        {
         s0 += "刷新窗口!";
        }
        else 
        {
        //获取当前时间
          var date=new Date();
          //将date设置为过去的时间
          alert("关闭网页");
          date.setTime(date.getTime()-10000);
          //将userId这个cookie删除
          document.cookie="zhuangtao;expire="+date.toUTCString();
          document.cookie="quanxianzifucuan;expire="+date.toUTCString();
          document.cookie="quanxian;expire="+date.toUTCString();
         s0 += "关闭窗口!"; sw = 1;
        }
      }
    }
    if (sw == 1) 
    {
     event.returnValue = "";
    }
    else 
    {
     currentKeyCode = -1;
    }
  
  }

<body onunload="CloseOpen(event)" ></body></html>

上面只有不能使用在任务栏关闭了,基本可以满足我们的要求了。

以上内容就是本文给大家介绍的javascript判断网页是关闭还是刷新,希望大家喜欢。

Javascript 相关文章推荐
ajax更新数据后,jquery、jq失效问题
Mar 16 Javascript
js中更短的 Array 类型转换
Oct 30 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 Javascript
JavaScript SetInterval与setTimeout使用方法详解
Nov 15 Javascript
基于javascript滚动图片具体实现
Nov 18 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
May 26 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
微信小程序HTTP接口请求封装的实现
Feb 21 Javascript
Layui tree 下拉菜单树的实例代码
Sep 21 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 Javascript
js查看一个函数的执行时间实例代码
Sep 12 #Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 #Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 #Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
Sep 11 #Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
Sep 11 #Javascript
js实现的后台左侧管理菜单代码
Sep 11 #Javascript
微信企业号开发之微信考勤Cookies的使用
Sep 11 #Javascript
You might like
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
Laravel5中contracts详解
2015/03/02 PHP
php实现购物车功能(上)
2020/07/23 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
jquery入门—访问DOM对象方法
2013/01/07 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
详解js中==与===的区别
2017/01/08 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
pip install urllib2不能安装的解决方法
2018/06/12 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
《李广射虎》教学反思
2014/04/27 职场文书
党员十八大心得体会
2014/09/12 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
单位推荐信范文
2015/03/27 职场文书
小学思品教学反思
2016/02/20 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
实现GO语言对数组切片去重
2022/04/20 Golang