0

我想检测浏览器/选项卡关闭事件,然后调用 struts 操作。当我在浏览器中只有 1 个选项卡时,我能够执行它。下面是我检测关闭事件的javascript代码:

<script type="text/javascript">
function loadOut() {
        if ((window.event.clientX < 0) || (window.event.clientY < 0)) {

        document.forms[0].action="Logout.do";
        document.forms[0].submit();
    }
}
</script>

我正在使用 onbeforeunload 来捕获浏览器关闭事件。

<body onbeforeunload="loadOut();">

当我只用一个选项卡关闭浏览器时,或者当我关闭我的选项卡本身时,该事件将触发,因为 X 或 Y 坐标中的任何一个都将是 <0。(这将帮助我检查我是否只是关闭了浏览器而不是导航到任何其他链接)。

但是,在打开多个选项卡的情况下,我会从 Internet Explorer 弹出“您要关闭所有选项卡还是当前选项卡”弹出窗口。并且当单击选项时,X 和 Y 坐标都不会保持 <0。并且动作不会触发。

请帮我解决这个问题。

PS:我可以选择从浏览器设置中删除该弹出窗口,但只想知道是否有其他方法

4

1 回答 1

0

我认为你在这里混淆了一些东西。

为了在某​​人关闭浏览器时将其注销,您应该使用会话 cookie

为了在您关闭选项卡时注销,您应该在每次交互时发送到服务器的 html 源代码中添加一个安全令牌。

为了在一段时间没有交互后注销某人,您可以简单地减少会话保持活动时间。结合 ajax 心跳或类似的东西,您将能够在至少一个选项卡仍处于打开状态时保持会话活动。

onbeforeunload 旨在告诉用户还有一些他尚未提交的内容,例如已填写但尚未提交的提交表单。谷歌邮件会这样做,以防邮件删除等事件尚未传输到服务器上。

客户端应该始终可以选择中断与服务器的所有连接。这就是为什么您在使用 onbeforeunload 时无能为力的原因

您可能要检查的另一件事是 onblur

于 2013-10-17T15:14:10.457 回答