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 相关文章推荐
用jquery存取照片的具体实现方法
Jun 30 Javascript
公共js在页面底部加载的注意事项介绍
Jul 18 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
mac上node.js环境的安装测试
Jul 03 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
Jul 07 Javascript
js指定步长实现单方向匀速运动
Jul 17 Javascript
webpack+vue2构建vue项目骨架的方法
Jan 09 Javascript
微信小程序开发问题之wx.previewImage
Dec 25 Javascript
微信小程序实现动态列表项的顺序加载动画
Jul 25 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 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
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
vue配置请求本地json数据的方法
2018/04/11 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
简述Python中的面向对象编程的概念
2015/04/27 Python
Python深度优先算法生成迷宫
2018/01/22 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
使用python去除图片白色像素的实例
2019/12/12 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
化工机械应届生求职信
2013/11/04 职场文书
水污染治理专业毕业生推荐信
2013/11/14 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
清明节演讲稿
2014/05/27 职场文书
反对邪教标语
2014/06/30 职场文书
如何写早恋检讨书
2014/09/10 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android