window.onunload仅在firefox中关闭选项卡时触发,而不是整个浏览器

时间:2010-10-06 20:59:02

标签: javascript firefox 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 个答案:

答案 0 :(得分:2)

你根本不能依赖onunload处理程序(它不仅仅是Firefox)。 onbeforeunload处理程序稍微更可靠,但只是轻微。

更新回复您的后续问题:如果您 使用锁定,那么是的,我肯定会使用服务器端超时(您没有其他选择;例如,如果用户的工作站是蓝屏,则您希望在某个时刻解锁该记录)。您可能希望在您看到用户的活动时重置超时(您可以在页面打开时使用ajax ping),并且如您所述,为用户提供显式释放记录的方法。超时应该由你决定多久,但是如果你使用了ajax ping机制,没有理由它甚至需要五分钟 - 你可以做一分钟的超时和30秒的ajax ping,甚至是无论如何,30秒超时和15秒ping。取决于您想要在服务器上放置什么样的负载。

答案 1 :(得分:0)

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