论坛首页 Web前端技术论坛

Javascript 刷新 却 关闭窗口 问题

浏览 13607 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-07-27  
我做的是一个聊天程序


在同一个页面

1.会在每隔3秒钟 刷新 一次 连接服务器获取信息
<meta http-equiv="refresh" Content="3;url=http://192.168.1.104:8080/CWaitList?action=queryPeople">

2.并且想在用户点击 关闭窗口 的时候 发送一个request给服务器
<body onUnload="window.open('CWaitList?action=logOut')">

但是每一次刷新的时候 怎么都当成关闭窗口事件了 郁闷

请问大家有没有什么解决方法阿?

只要能达到功能(刷新和关闭窗口时的request发送)就行,其他方法也行. Thx.
   发表时间:2005-07-27  
举个例子吧 :

auto.html

<META HTTP-EQUIV="Refresh" CONTENT="5">

<body onUnload="alert("I am Closed action!")">

运行一下就能明白了
0 请登录后投票
   发表时间:2005-07-27  
solarcult 写道
我做的是一个聊天程序


在同一个页面

1.会在每隔3秒钟 刷新 一次 连接服务器获取信息
<meta http-equiv="refresh" Content="3;url=http://192.168.1.104:8080/CWaitList?action=queryPeople">

2.并且想在用户点击 关闭窗口 的时候 发送一个request给服务器
<body onUnload="window.open('CWaitList?action=logOut')">

但是每一次刷新的时候 怎么都当成关闭窗口事件了 郁闷

请问大家有没有什么解决方法阿?

只要能达到功能(刷新和关闭窗口时的request发送)就行,其他方法也行. Thx.


解决方案一:
让刷新的页面独立,放到隐藏的iframe或frame里面.
<body onUnload="window.open('CWaitList?action=logOut')">放到主页面里.
解决方案二:
用javascript控制刷新.不要用<meta http-equiv="refresh" Content="3;url=http://192.168.1.104:8080/CWaitList?action=queryPeople">
0 请登录后投票
   发表时间:2005-07-27  
solarcult 写道

2.并且想在用户点击 关闭窗口 的时候 发送一个request给服务器
<body onUnload="window.open('CWaitList?action=logOut')">

但是每一次刷新的时候 怎么都当成关闭窗口事件了 郁闷

请问大家有没有什么解决方法阿?


ie下可以这样试试
<script language="javascript">
window.onbeforeunload = function()
{
  if((window.event.screenX - window.screenLeft) > (document.documentElement.scrollWidth-20) && window.event.clientY < 0 || window.event.altKey)
  {
window.open('CWaitList?action=logOut');
  }
}
</script>
0 请登录后投票
   发表时间:2005-07-27  
聊天程序可是ajax拿手的,为什么不借助ajax呢?

1.  不要用刷新,用xmlhttp获取新的聊天数据,通过js+dom动态显示。
2.  注销时使用 onbeforeunload,发送一个xmlhttp 请求。
0 请登录后投票
   发表时间:2005-07-27  
其实问题很简单:
<body onUnload="window.open('CWaitList?action=logOut')">
改成由按钮触发,当然,如果按"X"关闭窗体是不会logout的
0 请登录后投票
   发表时间:2005-07-29  
醒来
说得不错
0 请登录后投票
   发表时间:2005-07-29  
onUnload事件不是关闭窗口事件

它是指当前页面将被载出或者说失去的时候触发的,因此无论刷新还是关闭都是会触发的,并且不能阻止事件的发生。
0 请登录后投票
   发表时间:2005-07-29  
TO:zkj_beyond

frame 那个方法我用了 放到frameset的上层 可以解决 就是以后传递页面的时候就再也逃脱不掉那个frameset了

第二种方法我不会 以前不是在做这方面的 我以前做手机游戏 呵呵 J2ME

TO:黎明破晓前

那个函数很好用 不过能不能解释一下它的具体含义呢 if((window.event.screenX - window.screenLeft) > (document.documentElement.scrollWidth-20) && window.event.clientY < 0 || window.event.altKey)  因为有的时候 我把鼠标放到 x 上没有按 或者 放到 x 的下面和有右面 都回自动触发那个function()函数 所以希望能具体说一下 我好按照我的要求来自己改一改 

TO:醒来 lanny   聊天程序可是ajax拿手的,为什么不借助ajax呢?

我以前不知道ajax 没有接触过 谢谢你的建议 我会去了解一下

TO: ben

我有写按钮触发 就是怕用户不按 呵呵

TO: swing

原来onUnload是这个意思 我以前都不知道 

谢谢大家的回答 Thx a lot. 
0 请登录后投票
   发表时间:2005-07-31  
想说一句:
如果用户不按退出就不要触发好了.
您为为了检查用户是否退出了,不断在增加检查的代码,不断增加触发的函数,同时你也不断地引进了新的bug.这样做有必要吗?还有你真的能做到了,用户关闭浏览器时触发你想要触发的事件吗?如果掉线怎么办,如果系统死机这么办.
我觉得把程序写得简单点比较好.按按钮的就主动触发,否则在server端会用timeout,帮他触发.
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics