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 相关文章推荐
Javascript中Eval函数的使用说明
Oct 11 Javascript
jquery tab插件制作实现代码
Jun 22 Javascript
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
纯JS实现动态时间显示代码
Feb 08 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
input点击后placeholder中的提示消息消失
Jan 15 Javascript
JavaScript简单实现弹出拖拽窗口(二)
Jun 17 Javascript
详解 vue.js用法和特性
Oct 15 Javascript
了解javascript中变量及函数的提升
May 27 Javascript
layer.js之回调销毁对话框的例子
Sep 11 Javascript
小程序自定义模板实现吸顶功能
Jan 08 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程序?
2006/12/08 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
如何在微信小程序中存setStorage
2019/12/13 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
Python装饰器用法实例总结
2018/05/26 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
python cumsum函数的具体使用
2019/07/29 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
如何理解python中数字列表
2020/05/29 Python
python实现邮件循环自动发件功能
2020/09/11 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
复古服装:RetroStage
2019/05/10 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
中专毕业生求职简历的自我评价
2013/10/21 职场文书
《火烧云》教学反思
2014/04/12 职场文书
践行三严三实心得体会
2014/10/13 职场文书
海上钢琴师观后感
2015/06/03 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android