2010-10-06 35 views
3

UPDATE
window.onunload只触发,而不是整个浏览器

所以同时读取你的答案我知道后也确定没有可靠的方法时,关闭浏览器窗口。最初我打算在页面关闭时使用它来解锁数据库中的记录。基本上,当用户加载页面时,访问锁的记录会在页面关闭时解锁。有关如何以不同方式做到这一点的更好建议?我正考虑在页面上发布通知,他们必须使用关闭按钮关闭表单而不是X,如果他们使用X关闭,记录会保持锁定状态,例如5分钟,直到他们可以访问它再次。


此代码非常简单,因为我只是在测试它。基本上,当我在IE和Chrome中运行此页面时,警报触发得很好。当我在Firefox中运行它时,只有一个选项卡,并关闭整个浏览器,警报不会触发。但是,如果我有多个选项卡并将该页面作为新选项卡打开,然后使用选项卡上的X关闭它,则会触发警报。有谁知道Firefox在那里做什么?

任何帮助表示赞赏,因为必须打开多个选项卡才能启动onunload到火是相当不受欢迎的。

<html> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 

     window.onunload = function() { 
      alert("unload event detected!"); 
     } 

    </script> 
</head> 
<body> 
</body> 
</html> 

回答

2

你不能指望onunload处理程序开火(它不只是Firefox)。 onbeforeunload处理程序是略微更可靠,但只是略有。

更新回复您的后续问题:如果你使用锁,那么是的,我肯定会使用服务器端超时(你没有其他选择;如果用户的工作站蓝领例如,你想在某个时候解锁该记录)。您可能希望在您看到用户活动时重置超时(您可以在页面打开时使用ajax ping),并且正如您所说的那样,为用户提供一种明确释放记录的方法。超时时间应该由您决定,但如果您使用ajax ping机制,则无需任何理由甚至需要五分钟  —您可以执行一分钟的超时和30秒的ajax ping,或者甚至一个30秒的超时和一个15秒的ping,无论如何。取决于你想放在服务器上的负载类型。

+0

感谢您的帮助,请查看我对该帖子的更新。 – ryanulit 2010-10-07 12:48:21

0

点击X关闭浏览器后,Firefox立即关闭。出于某种原因,它'忘记'调用onunload事件。

+4

'忘记'调用它,或故意不调用它?举个例子,我不喜欢一个页面干扰我故意终止窗口或整个程序,所以它可能是开发者有意识地决定不发布该事件。 – 2010-10-06 21:32:30

+0

什么@斯蒂芬说。这在过去曾被不良网站滥用(曾几何时,在实验室计算机上将IE的“主页”设置为whitehouse.com是令新用户感到尴尬的好方法......) – Shog9 2010-10-06 22:39:45

+0

感谢您的帮助,请检查我的更新到帖子。 – ryanulit 2010-10-07 12:49:18

相关问题