关于监控窗口是否关闭的onbeforeunload与onunload事件

Onunload,onbeforeunload都是在刷新或关闭时调用,可以在 
其中值为“no”的就是不要的XX栏。 

这段代码中有几个属性值得说明一下: 
1.window.onbeforeunload():此方法被触发于: 
关闭浏览器窗口 
通过地址栏或收藏夹前往其他页面的时候 
点击返回,前进,刷新,主页其中一个的时候 
点击 一个前往其他页面的url连接的时候 

如果是用于上面我提到的聊天室窗口,那就只考虑两个事件四个方法: 
1、正常关闭:点击关闭按钮(右上角,这个按钮的大小和代码中那个“-20”有关,最后我会说到);或者 按下ALT+F4键(所以代码中有对ALT键的检测)。 
2、正常刷新:按下F5键;或者 通过右键刷新。 

2. 
window.event.screenX:鼠标相对于用户屏幕的水平位置 
window.screenLeft:窗口左上角相对于屏幕左上角的水平位置 
window.event.clientY:鼠标在窗口客户区域(除去所有的XX栏)中的Y坐标(比如在标题栏上时,该值为负值) 
window.event.altKey:当alt键按下时,值为 TRUE ,否则为 FALSE 。只读。 
document.documentElement.scrollWidth:窗口网页正文全文宽 

所以 
n = window.event.screenX - window.screenLeft: 
求出鼠标在当前窗口上的水平位置(参照:当前窗口左上角为0、0坐标)。 

b = n > document.documentElement.scrollWidth-20: 
只看水平坐标:鼠标在当前窗口内时,nm,b为true。20这个值是指关闭按钮的宽度。 m=document.documentElement.scrollWidth-20 

window.event.clientY < 0: 
只看垂直坐标:鼠标在客户区内时,y>0,x为false;鼠标在客户区外时,y<0,x为true。y=window.event.clientY


综上: 
当onbeforeunload时间发生时,有ALT按下,或者鼠标的位置在标题栏的最右上角(鼠标停留在关闭按钮上时)。就能执行if为真的语句了。 

window.event.returnValue = ""; 主要是用来当用户关闭了窗口而不是刷新时返回一个值,这个值由你设定。

注意:
这个代码看似不错,但是有一点,它的基础是以用户的浏览器窗口为标准windows窗口而定的。也就是说,用户的浏览器窗口得是win2000那个样子的,因为这个样子下,关闭按钮的大小才会在 20 象素以内。如果用户的窗口不是标准的windows窗口,而是其它的主题等等,这段代码可能就用不了了!
此外有个小BUG,当鼠标停留在最右上角(关闭按钮)时按下F5。代码会执行关闭窗口时的代码,但是窗口却只是刷新而已却不会关闭。
2、onunload事件
用法:
·object.onbeforeunload = handler 
·
  描述:
当用户关闭一个页面时触发 onunload 事件。
  触发于:
   ·关闭浏览器窗口 
   ·通过地址栏或收藏夹前往其他页面的时候 
   ·点击返回,前进,刷新,主页其中一个的时候 
   ·点击 一个前往其他页面的url连接的时候 
   ·调用以下任意一个事件的时候:click,document write,document open,document close,window close ,window navigate ,window NavigateAndFind,location replace,location reload,form submit. 
   ·当用window open打开一个页面,并把本页的window的名字传给要打开的页面的时候。 
   ·重新赋予location.href的值的时候。 
   ·通过input type=”submit”按钮提交一个具有指定action的表单的时候。 

  示例:

复制代码
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head >
< meta http - equiv = " Content-Type "  content = " text/html; charset=gb2312 "   / >
< title > onunload测试 < / title>
< script >
   function  checkLeave(){
     alert( " 欢迎下次再来! " );
   }
< / script>
< / head>
< body onunload = " checkLeave() " >
< / body>
< / html>
复制代码


你可能感兴趣的:(JSP)