3

更新

因此,在阅读了您的两个答案后,我意识到没有可靠的方法来确定浏览器窗口何时关闭。最初我打算在页面关闭时使用它来解锁数据库中的记录。基本上,当用户加载页面时,它正在访问的记录会锁定,然后在页面关闭时解锁。关于如何以不同/更好的方式做到这一点的任何建议?我正在考虑只是在页面上发布一条通知,他们必须使用关闭按钮来关闭表单而不是 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>
4

2 回答 2

2

您根本不能指望onunload处理程序触发(不仅仅是 Firefox)。onbeforeunload处理程序稍微可靠一些,但只是稍微可靠一些。

更新响应您的后续问题:如果您必须使用锁,那么是的,我肯定会使用服务器端超时(您别无选择;例如,如果用户的工作站蓝屏,您想要记录在某个时候解锁)。您可能希望在任何时候看到来自用户的活动时重置超时(您可以在页面打开时使用 ajax ping),并且如您所说,为用户提供一种显式释放记录的方法。超时应该多长时间取决于您,但如果您使用 ajax ping 机制,没有理由甚至需要 5 分钟 - 您可以执行 1 分钟超时和 30 秒 ajax ping,甚至是30 秒超时和 15 秒 ping,无论如何。取决于您想在服务器上放置什么样的负载。

于 2010-10-06T21:09:13.540 回答
0

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

于 2010-10-06T21:06:20.237 回答