【问题标题】:Detect Browser Close on Asp.net在 Asp.net 上检测浏览器关闭
【发布时间】:2009-12-01 06:49:45
【问题描述】:

我想在注销时做一些功能,如果用户直接关闭了他的浏览器,那么同样的功能想要做,我们不能在页面卸载上做,因为我的网站上有超过 100 个页面,因为这将起作用从每个页面重定向

谢谢

【问题讨论】:

  • 检测浏览器关闭与asp.net无关。这是客户端的事情。

标签: c# asp.net javascript


【解决方案1】:
<script type="text/javascript">
var closing = true;
$(function () {
    $("a,input[type=submit]").click(function () { closing = false; });
    $(window).unload(function () {
        if (closing) {
            jQuery.ajax({ url: "http://localhost:49591/Account/LogOff", async: false });
        }
    });
});
</script>

使用 javascript + jquery 关闭窗口时调用 logout.aspx。在 logout.aspx 页面加载事件中做任何你想做的事情。

上面的 sn-p 必须添加到您的母版页的 html 中。

【讨论】:

  • +1,听起来很合理。浏览器关闭必须在客户端 (JavaScript) 完成,因为它不会被发送回服务器,因此不会收到有关它的通知。
  • 但是 OP 说他们不想使用页面卸载,对吧?一个问题是,该事件不仅会在用户关闭浏览器时触发(尽管仅在 一些 浏览器中),而且还会在他们导航到下一页时触发。
  • 已修改答案以适应因导航而导致卸载的链接/提交按钮。
  • Shameem 您必须提供绝对网址而不是相对网址。您也必须禁用浏览器工具栏。
  • 此解决方案可能会导致问题;打开同一个站点的多个选项卡/窗口是很正常的,因此如果您这样做并关闭其中一个选项卡/窗口,您将退出另一个选项卡/窗口。
【解决方案2】:

您可以有一个用于“注销”案例的按钮。

很遗憾,如果用户关闭浏览器,没有可靠的方法可以得到通知。除了您说过不想要的客户端页面卸载之外,唯一的其他选择是定期基于 Ajax 的轮询;两者都很丑,而且出了名的不可靠。

一般来说,服务器端超时是更好的方法。

【讨论】:

    【解决方案3】:

    这不就是 global.asax 中的 Session_OnEnd 的用途吗?

    浏览器关闭时不会触发此事件。

    【讨论】:

    • Session_OnEnd 并不总是可靠的,只在 InProc 会话模式下触发
    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2014-02-21
    • 2011-03-11
    相关资源
    最近更新 更多