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 CSS修改学习第六章 拖拽
Feb 19 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
JavaScript prototype属性深入介绍
Nov 27 Javascript
javascript获取选中的文本的方法代码
Oct 30 Javascript
JS基于Ajax实现的网页Loading效果代码
Oct 27 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
Node.js+Express配置入门教程详解
May 19 Javascript
老生常谈JavaScript 函数表达式
Sep 01 Javascript
vue 微信授权登录解决方案
Apr 10 Javascript
详解在Javascript中进行面向切面编程
Apr 28 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
JS如何使用剪贴板操作Clipboard API
May 17 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抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
7个有用的jQuery代码片段分享
2015/05/19 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
python使用PyGame模块播放声音的方法
2015/05/20 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
Atom的python插件和常用插件说明
2018/07/08 Python
flask session组件的使用示例
2018/12/25 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
python利用tkinter实现屏保
2019/07/30 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
python双向链表原理与实现方法详解
2019/12/03 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
浅析python实现动态规划背包问题
2020/12/31 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
四好少年事迹材料
2014/01/12 职场文书
大学生就业策划书范文
2014/04/04 职场文书
服务理念标语
2014/06/18 职场文书
电影圆明园观后感
2015/06/03 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python