【问题标题】:Detect browser close event when multiple tabs are open in Internet Explorer在 Internet Explorer 中打开多个选项卡时检测浏览器关闭事件
【发布时间】:2013-10-26 03:32:42
【问题描述】:

我想检测浏览器/选项卡关闭事件,然后调用 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 坐标中的任何一个都将是

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

请帮我解决这个问题。

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

【问题讨论】:

标签: java javascript jquery ajax struts


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 暂时不谈会话。我只想在关闭浏览器或选项卡时触发一个事件/动作(而不是导航到任何其他页面)
  • 我想说的是,您的特定目标是不可能的,除非您为服务器保持一个打开的套接字并检测套接字是否正在关闭或以不同的方式监控不活动。
  • 我想我可能有另一种方法来解决我的问题,跟踪会话注销时间,我调用一个函数 n 次以将会话属性更新为当前日期和时间。并且使用 HttpSessionListener,我可以重写 sessionDestroyed 方法来获取注销时间的保存值并在 DB 中更新它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
相关资源
最近更新 更多