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类库D
Oct 24 Javascript
JavaScript操作HTML元素和样式的方法详解
Oct 21 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
Bootstrap 轮播(Carousel)插件
Dec 26 Javascript
Node.js数据库操作之连接MySQL数据库(一)
Mar 04 Javascript
VUE长按事件需求详解
Oct 18 Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
javascript中一些奇葩的日期换算方法总结
Nov 14 Javascript
jQuery/JS监听input输入框值变化实例
Oct 17 jQuery
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 jQuery
详解vue中v-for的key唯一性
May 15 Vue.js
vue实现登陆页面开发实践
May 30 Vue.js
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
短波收音机简介
2021/03/01 无线电
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
PHP 实现重载
2021/03/09 PHP
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Keras设置以及获取权重的实现
2020/06/19 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
2015自愿离婚协议书范本
2015/01/28 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL