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 相关文章推荐
js multiple全选与取消全选实现代码
Dec 04 Javascript
js自动查找select下拉的菜单并选择(示例代码)
Feb 26 Javascript
jquery制作图片时钟特效
Mar 30 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
VUEJS实战之利用laypage插件实现分页(3)
Jun 13 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 Javascript
Bootstrap基本组件学习笔记之分页(12)
Dec 08 Javascript
React教程之封装一个Portal可复用组件的方法
Jan 02 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
Vue Router 实现动态路由和常见问题及解决方法
Mar 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
php中批量替换文件名的实现代码
2011/07/20 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
Python全局变量用法实例分析
2016/07/19 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
对Python中画图时候的线类型详解
2019/07/07 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
关于python中remove的一些坑小结
2021/01/04 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
党风廉设责任书
2014/04/16 职场文书
团队拓展活动总结
2014/08/27 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
八年级英语教学反思
2016/02/15 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
python实现进度条的多种实现
2021/04/29 Python