Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定。区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。
Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。曾经做一个考试系统,涉及到防止用户半途退出考试(有意或者无意),代码如下:
<html>
<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>
</head>
<body>
</body>
</html>
现在的需求是,我在线打开一个PDF文件进行编辑,然后在数据库中标志这个文件正在被编辑,不能再次被打开。于是我就想能不能捕捉页面打开事件和页面关闭事件,结果我试了N种方法,发现失败了,最后我找到了一段文字,我得改变思路才行了
asp.net 的页面的所有事件,都是在服务器端,页面还没有下载到客户端之前发生的,当HTML被下载到客户端浏览器呈现之后,不用js,不用ajax,在下次POSTBACK之前,,就跟服务器端没什么关系了。基本上说,asp.net无法直接捕获到页面关闭的事件。通过js可以在获取页面关闭时的事件,并通过ajax通知服务器。但是,这个操作并不能保证能按预想中的完成。另外一种常用的方式就是利用会话超时。如果你对时间精度要求比较高,可以自己设计一个会话超时控制方案,同时通过ajax来发送“心跳包”,当页面关闭后,服务器就会在指定的时间内收不到心跳包,以此来判断页面已被关闭,从而做相应的操作。