【问题标题】:Why browser refresh and close event detection is not working for IE and Safari为什么浏览器刷新和关闭事件检测不适用于 IE 和 Safari
【发布时间】:2019-02-21 09:11:28
【问题描述】:

我需要在浏览器窗口关闭时调用logout function。它在 Chrome 中运行良好,但在 IE 和 Safari 中无法运行。

我尝试了以下代码:

window.onbeforeunload = function (e) {
    // Your logic to prepare for 'Stay on this Page' goes here
    var evtobj = window.event ? event : e;
    if (evtobj == e) {
        //firefox
        if (!evtobj.clientY) {
           //server call
        }
    }
    else {
        //IE
        if (evtobj.clientY < 0) {
           //server call
        }
    }
    //return "Please click 'Stay on this Page' and we will give you candy";
};

我尝试了其他几种方法,但都没有奏效。请指教。

【问题讨论】:

  • 嗨,你能检查一下这个链接,它可能会有所帮助stackoverflow.com/a/54801161/7924858请投票
  • 谢谢@abhinavxeon,已经试过了,不行。
  • 有很多方法可以关闭浏览器窗口,因此不幸的是(有点,幸运的是)不可能纯粹检测窗口正在关闭。 JavaScript 有 onundload 和 onbeforeunload 事件,但它们不能跨越安全限制为它们设置的边界。

标签: javascript jquery browser-close


【解决方案1】:

你的设计有问题,你不应该依赖客户端钩子来执行注销。该事件无法执行的原因有十亿个。只需将 onbeforeunload 事件限制为执行信息内容而不是关键操作。

顺便说一句:

  • 不要在beforeunload 活动中返回!这会在 IE 中产生一些问题
  • 使用window.sessionStorage 使某些数据持续到用户关闭标签页
  • 使用会话 cookie 将用户的敏感数据存储为令牌,并检查用户是否登录到服务器而不是客户端

【讨论】:

  • 感谢@Cristian Traìna,我尝试了浏览器会话存储,但关闭浏览器后会话存储将清除。所以我无法验证它是刷新还是关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2011-03-28
  • 1970-01-01
  • 2013-01-31
  • 2012-04-08
相关资源
最近更新 更多