【问题标题】:Find browser close/refresh using javascript/jquery使用 javascript/jquery 查找浏览器关闭/刷新
【发布时间】:2011-05-13 16:23:02
【问题描述】:
  1. 谁能解释一下是否有办法使用 javascript/jquery 区分浏览器关闭和刷新事件。
    基本上,如果用户关闭选项卡,我需要注销用户。

    我尝试使用 jQuery .unload()。但这会触发刷新和表单提交。我尝试在表单提交期间分配一个全局变量并避免使用 .unload() 。但是如何避免刷新,或者是否有任何其他解决方法可以实现这一点..

  2. 我想知道是否只有在关闭窗口(而不是选项卡)的情况下才能做到这一点。

【问题讨论】:

  • 我认为只有卸载事件
  • 您可能必须尝试找出是谁在要求关闭窗口。如果源是按钮提交,那么不要注销..?!或者如果页面重新加载,一些逻辑可以直接重新登录?但最好的办法是保留某种 httpSession
  • 这可能用 cookie 更好地实现:刷新将保留 cookie,关闭将结束会话。然后使用 cookie 变量来确定你想要做什么。
  • 是的,还是饼干!我总是忘记他们
  • 你可以检测到用户的F5按钮,关于它,但是使用服务器端传递给js的referer url,看看它是否是你的域

标签: javascript jquery


【解决方案1】:

您可以尝试使用实例cookie,即一旦关闭浏览器就会删除的cookie,然后您可以从JavaScript 中检查cookie 是否存在。否则我认为没有办法仅使用 javascript 来区分您正在寻找的差异。

【讨论】:

  • 我不认为我跟随。 cookie 如何帮助在页面关闭时注销某人?如果在他们卸载页面时设置了 cookie,那么您可以在他们重新加载时检查它是否存在,但是如果他们关闭了浏览器/选项卡,那么没有 JS 告诉系统注销?我错过了什么吗?
  • 对此有一个疑问,选项卡的线程/进程会立即被杀死吗?我担心的是在你设置他注销的cookie之前,如果进程/线程被杀死,它可能不起作用。
  • 这个想法是设置没有过期的原始登录cookie。当他们关闭选项卡时,该 cookie(用于验证用户身份)将被销毁,导致他们在再次查看页面时不再登录。
【解决方案2】:

不幸的是,JavaScript 只提供onunload,只要用户离开、关闭或重新加载当前页面,就会触发它。

Robert 是正确的,这对于会话 cookie 来说是一个很好的情况:如果您创建一个 cookie 时没有指定过期时间,那么当用户关闭选项卡/窗口时,它就会过期。

【讨论】:

    【解决方案3】:

    除了一些基于 cookie 的方法(如非持久性 cookie)之外,您可能无法做到这一点,这是一种解决方法。其次,区分页面刷新、基于表单的页面重定向卸载或浏览器关闭并不容易。据我所知很难识别。

    您可以在客户关闭标签之前做一些小事。 javascript detect browser close tab/close browser 但是如果您的操作列表很大并且选项卡在完成之前关闭,您将无助。你可以试试,但根据我的经验,不要依赖它。

    window.addEventListener("beforeunload", function (e) {
      var confirmationMessage = "\o/";
      /* Do you small action code here */
      (e || window.event).returnValue = confirmationMessage; //Gecko + IE
      return confirmationMessage;                            //Webkit, Safari, Chrome
    });
    

    https://developer.mozilla.org/en-US/docs/Web/Reference/Events/beforeunload?redirectlocale=en-US&redirectslug=DOM/Mozilla_event_reference/beforeunload

    【讨论】:

      【解决方案4】:

      遗憾的是,onunload 或 onbeforeunload 在浏览器之间的实现并不是那么好,并且在崩溃的情况下永远不会触发 unload 事件。最好的办法是不要担心捕获卸载事件,只需设置合理的会话过期时间即可。

      如果您不必担心区分表单提交和刷新,您可以使用 onunload 获得相当好的覆盖率,但它仍然不会是 100%。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 2018-09-26
        • 1970-01-01
        • 2021-10-05
        相关资源
        最近更新 更多