`
everlxq
  • 浏览: 108647 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

页面关闭事件的获取

 
阅读更多
放在head里面
<script type="text/javascript"> 
  window.onbeforeunload = onbeforeunload_handler;
  window.onunload = onunload_handler;
  function onbeforeunload_handler(){
    var warning="确认退出?";
     return warning;
  }
 
function onunload_handler(){
  var warning="谢谢光临";
  alert(warning);
}
</script>



关于js关闭窗口的事件和用法 


转载自:http://www.cnblogs.com/panjun-donet/archive/2009/04/03/1428830.html



Onunload与Onbeforeunload

Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定。区别在于 onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。

    Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而 onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。曾经做一个考试系统,涉及到防止用户半途退出考试(有意或者无意),代码如下:

<script type="text/javascript">
  window.onbeforeunload = onbeforeunload_handler;
  window.onunload = onunload_handler;
  function onbeforeunload_handler(){
    var warning="确认退出?";
     return warning;
  }

function onunload_handler(){
  var warning="谢谢光临";
  alert(warning);
}
</script>

同时在网上找到了一篇相关的文章来分享下:
 B/S架构的应用系统,除了需要使用一些动态脚本语言进行数据库等一系列服务器资源的访问,还需要适当使用客户端脚本进行页面的界面动态显示、提交服务器前的预处理、根据用户的操作行为进行合理的事件处理等等。
你可能认为最流行的语言是Java、Basic、C、C++之类的高级语言,实质上Javascript也是当之无愧的流行语言。它的奥妙远比你想象中的还要多。如果你看过Google的GMail和Map,你要知道Javascript也可以让世界变得触手可及将技术变得炉火炖青的地步。
  本文将从实际中经常遇到的几个问题入手,着手用Javascript脚本巧妙解决这些问题,以此抛砖引玉希望给大家带来帮助。

强制关闭窗口后清除用户Session

  一般的会员式网站,在会员登陆成功后都会建立会话或者Cookie,然后可以直接在站点间共享会员的数据。而这些数据通常放置在服务器内存中。在会员退出时,按照正常的设计思路是执行退出功能释放会员登陆成功后所使用的服务器和客户端等相关资源。现在经常遇到的问题是,用户经常直接关闭网页而不是我们所期望执行的退出程序。这样就会造成用户登陆后的资源不会及时释放而加重服务器负荷,随着问题的进一步累积逐步的放大从而影响服务器的性能。

  有幸的是在网络上找到针对IE浏览器捕获用户使用Alt+F4、标题栏按右键关闭、双击标题栏、直接按关闭按钮的事件的方法。当然对于一些直接关闭进程或者最小化的方式在任务栏进行关闭是不能正常捕获的,但现在所涉及的解决方案,可以解决大多数存在的问题。

<script language="javascript">
function window.onUnload()
{
var newWindow;
if((window.screenLeft>=10000 && window.screenTop>=10000)||event.altKey)
{
newWindow=window.open('退出程序地址','网页名称',
'width=0,height=0,top=4000,left=4000');//新窗口将在视区之外打开
newWindow.opener=null;
sleep(5000);//执行休眠操作以便能够处理完新打开窗口执行代码
newWindow.close();//新窗口关闭
……//其他需要执行的退出程序序列可参考上面进行添加
}
}
function sleep(milisecond)
{
var currentDate,beginDate=new Date();
var beginHour,beginMinute,beginSecond,beginMs;
var hourGaps,minuteGaps,secondGaps,msGaps,gaps;
beginHour=beginDate.getHours();
beginMinute=beginDate.getMinutes();
beginSecond=beginDate.getSeconds();
beginMs=beginDate.getMilliseconds();
do
{
currentDate=new Date();
hourGaps=currentDate.getHours() - beginHour;
minuteGaps=currentDate.getMinutes() - beginMinute;
secondGaps=currentDate.getSeconds() - beginSecond;
msGaps=currentDate.getMilliseconds() - beginMs;
if(hourGaps<0) hourGaps+=24; //考虑进时进分进秒的特殊情况
gaps=hourGaps*3600+ minuteGaps*60+ secondGaps;
gaps=gaps*1000+msGaps;
}while(gaps<milisecond);
}
</script>
说明:
window.screenLeft = 10000 + 边框宽 (2×2) = 10004
window.screenTop = 10000 + 工具栏高 + 标题栏高 = 10097
需要说明的,在onBeforeUnload中屏幕这些坐标属性都是正常数值。
screenLeft:获取浏览器客户区左上角相对于屏幕左上角的 x 坐标。
screenTop:获取浏览器客户区左上角相对于屏幕左上角的 y 坐标。
  如果需使用window.location指定URL进行处理,那么需放在onBeforeUnload 事件中而不是onUnload事件。在onUnload里不要使用window.close,因为对象销毁前会立即触发该事件,无法有效执行由被销毁对象所引发的引用。而onBeforeUnload是页面将要被卸载前触发的事件。解决的方法是新开一个窗口再将之关闭。而所谓的清除实质上就是把做好退出功能的页面,直接以打开新窗口方式的调用。在调用到关闭的时候要尽可能停留一段时间确保全部代码被有效触发。需要说明的是onUnload事件,在页面前进、后退、刷新、转向、关闭后都会触发。因此要捕获强制关闭窗口的特殊事件,需要在代码上加上判断条件,以保证在符合情形的条件下触发。该段代码已经成功地进行测试。

对话框取值

  在网页中,经常会使用一种类似对话框的设计,为了方便用户输入、快速选择经常会打开一个页面,再做出选择后关闭该页面并将用户选择的数据传递到父页面做后续处理。

  前些时间,看到一种比较原始的方法,不是很通用,直接在子页面里修改父页面某个控件的数值再加之关闭。这样做的缺点是,不适合大规模的调用。假设父页面有开始日期与结束日期两个框需要接受日历页面的输入,那么你需要做两个不同的日历页面才能保证两个框都有对应的数据。这在大型工程中是不好的设计方法。多样化的外部环境,如果不考虑通用的方法,将增加维护的难度同时降低开发的效率。

  IE支持模态窗口,在对话框的页面中通过设置的 window.returnValue的数值,在父窗体中靠调用window.showModalDialog获取返回值,无效将返回null(打开的页面不存在)或undefined(window.returnValue没有设置)。我设计了getDialog函数,用于获取子窗体的返回值,异常或者无效将返回空串否则为正常返回数据。
而原先的window.open方式,我也改进一下设计了getWindowReturnValue,通过侦听子窗体的window.returnValue,如果有数据将开始终止。如果窗体仍然打开则自动关闭。同样两个函数都需要进行正确的设置 window.returnValue。

//在IE中打开模态对话框并返回数据
//需要在打开页面设置window.returnValue,错误或无效返回空
function getDialog(url)
{
var returnValue;
try
{
returnValue=window.showModalDialog(url);
}catch(e)
{ return ""; }
return (returnValue==null||returnValue=="undefined")?"":returnValue;
}
//使用window.open来获取子窗口数据,需要动态设置window.returnValue
//参数为:地址、名称、宽度、高度,不设置宽度与高度请设为0。
function getWindowReturnValue(url,name,width,height)
{
var opener=null;
var spec="toolbar=0,menubar=0,scrollbars=0,resizeable=0";
var returnValue=null;
if(width>0) spec=spec+",width="+String.valueOf(width);
if(height>0)
{
spec=spec+",height="+String.valueOf(height);
}
opener=window.open(url,name,spec);

while(!opener.window.closed)
{
returnValue=opener.window.returnValue;
if(returnValue!=null&&returnValue.length>0) break;
}
if(!opener.window.closed) opener.window.close();
return returnValue;
}
分享到:
评论

相关推荐

    JS针对浏览器窗口关闭事件的监听方法集锦

    在JavaScript中,监听浏览器窗口关闭事件对于实现特定的用户交互或数据保存功能至关重要。下面将详细介绍几种常用的浏览器关闭事件监听方法。 1. 方式一:适用于IE浏览器,仅在关闭时提示 ```javascript window....

    分享JavaScript获取网页关闭与取消关闭的事件

    这篇分享主要探讨了如何利用JavaScript获取网页关闭以及用户取消关闭的事件,以提供更友好的用户体验。 首先,`onbeforeunload`事件是JavaScript中用于在页面卸载前执行的事件,通常用来警告用户他们的操作可能会...

    如何在父窗口中得知window.open()出的子窗口关闭事件

    代码如下: &lt;... &lt;BODY&gt; &lt;P&gt; &lt;/P&gt; &lt;form name=fm_Info&gt; &lt;input type=text name=txtValue&gt; &lt;/form&gt; [removed] var timer var winOpen function IfWindowClosed() { if (winOpen.closed == ...

    JS区分浏览器页面是刷新还是关闭

    代码实现时,需要在页面刷新或关闭时更新LocalStorage中保存的最后离开时间,确保下次判断时可以获取到正确的值。此外,页面卸载时应该执行登出电话系统等清理操作,无论页面是刷新还是关闭。 总之,区分页面刷新和...

    flex监听浏览器关闭事件

    通过上述步骤,我们可以实现在Flex应用中监听浏览器关闭事件的功能,并在用户关闭页面时执行相应的操作。这种技术不仅适用于简单的警告提示,还可以用于更复杂的场景,如保存数据、发送日志等。

    浏览器关闭事件.txt浏览器关闭事件.txt浏览器关闭事件.txt浏览器关闭事件.txt

    浏览器关闭事件通常指的是当用户关闭浏览器窗口或者离开当前网页时触发的事件。这种事件对于开发者来说非常重要,因为它可以用来做一些清理工作,比如释放资源、保存用户状态等。 #### 如何监听浏览器关闭事件 在...

    判断页面是关闭还是刷新的js代码

    在探讨“判断页面是关闭还是刷新的js代码”这一主题时,我们首先需要理解网页生命周期中的几个关键事件:`onload`、`onunload`、`onbeforeunload`以及`onclose`。这些事件在网页加载、卸载或刷新过程中扮演着重要...

    弹出层关闭父页面刷新

    在网页开发中,有时我们需要实现一个功能:当一个弹出层(通常是模态窗口或对话框)被关闭时,能够自动刷新其父页面的内容。这个功能常见于数据编辑或者信息确认场景,用户在子窗口中完成操作后,返回父页面看到最新...

    jsp页面中窗口关闭,退出的方式分享.docx

    ### JSP 页面中窗口关闭与退出方式解析 #### 一、引言 在Web开发过程中,经常需要处理用户操作完成后自动关闭窗口或退出系统的情况。本文档将详细介绍JSP页面中实现窗口关闭与退出的不同方法及其应用场景。 #### ...

    基于JavaScript判断浏览器到底是关闭还是刷新(超准确)

    - 使用`window.event`来获取触发事件的环境信息,并判断页面是关闭还是刷新。 - 利用`onbeforeunload`事件的返回值来进行判断,如果返回值被设置,则一般表示是关闭页面。 - 检测`onbeforeunload`事件和`onunload`...

    QT HTTP请求获取网页

    在QT中进行HTTP请求是一项常见的任务,主要用于获取网络资源,例如网页内容。本文将深入探讨如何使用QT进行HTTP GET请求来获取网页。 首先,你需要了解HTTP协议。HTTP(超文本传输协议)是互联网上应用最为广泛的一...

    Bootstrap Modal对话框如何在关闭时触发事件

    Bootstrap模态对话框(Modal)是网页设计中常用的一个组件,它允许在不离开当前页面的情况下展示信息或交互。在Bootstrap中,模态对话框提供了一系列的事件,可以帮助开发者更精细地控制模态框的生命周期,包括在...

    模态窗口关闭时刷新父页面js文件

    2. **添加JavaScript**:在JavaScript中,我们首先获取到模态窗口和关闭按钮的引用,然后为关闭按钮添加点击事件监听器。 ```javascript var modal = document.getElementById("myModal"); var closeModalBtn = ...

    VC获取网页标题.zip

    本主题聚焦于使用VC来获取网页的标题,这是一个涉及到网络编程和字符串处理的重要技能。 首先,要从网页中获取标题,我们需要理解HTTP协议的基本原理。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,...

    VB.NET获取网页源码

    ### VB.NET 获取网页源码详解 在VB.NET中获取网页源码是一项常见且实用的功能,尤其是在需要抓取网站数据、进行网络爬虫开发或自动化测试等场景下。本文将详细介绍如何利用VB.NET来实现这一功能,并对代码进行深入...

    两行代码实现Devexpress中XtraTabControl双击关闭page页

    在很多应用程序中,我们可能希望实现一个功能,即用户可以通过双击标签页来关闭当前显示的页面,这可以提高用户体验。本文将详细讲解如何通过两行代码实现这一功能。 首先,我们需要了解XtraTabControl的基本结构。...

    ASP开发实例 窗口及页面设置的一些样式 鼠标单击链接样式 为弹出的窗口加入关闭按钮 日期选择器 弹出全屏显示网页 关闭IE主窗口时,不弹出询问对话框 弹出网页对话框 安徽机电职业技术学院 陈伟

    在本实例中,我们将深入探讨ASP开发中的几个关键知识点,包括窗口和页面的样式设置、鼠标单击链接的样式、添加窗口关闭按钮、日期选择器、全屏显示网页以及关闭IE浏览器时的提示对话框处理。 1. **窗口及页面设置**...

    ESP8266 http 获取网页例程

    本教程将详细讲解如何使用ESP8266通过HTTP协议获取网页内容。 首先,我们需要了解HTTP协议的基本概念。HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是互联网上应用最广泛的一...

    页面加载事件、页面定时任务

    页面加载事件与页面定时任务是Web开发中的两个重要概念,它们对于实现动态网页效果、提高用户体验具有重要作用。 **页面加载事件**指的是当一个HTML页面被浏览器加载完毕后自动触发的一个事件。通过监听这个事件,...

Global site tag (gtag.js) - Google Analytics