【问题标题】:Invalidate session when closing the browser not working for other browsers apart from IE关闭浏览器时会话无效,除 IE 外,其他浏览器不工作
【发布时间】:2020-08-23 06:05:57
【问题描述】:

当我登录我的应用程序时,单击登录按钮后,我的应用程序将在弹出窗口(浏览器弹出窗口)中打开。当我单击弹出窗口的关闭按钮(X)时,我已经编写了 javascript 代码以从应用程序中注销。我只能在 IE 浏览器上从我的应用程序中注销。但相同的代码不适用于其他浏览器(例如:Chrome、firefox...)

这是我的代码 sn-p

<script type="text/javascript">

    var valid = false;
    window.onbeforeunload = function (e)
    {
      if ((window.event.clientX < 0) || (window.event.clientY<0)) // close button
      {
            LoggedOffWindow();
      }
    }; 

    //This will remove session
    function LoggedOffWindow()
    {
        var url = '<%=request.getContextPath()%>/logoff.do';
        try {
            new Ajax.Request(url,
                {
                    method: 'get',
                    parameters: {},
                    onSuccess: function () {
                        ;
                    },
                    onFailure: function () {
                        ;
                    },
                    onException: function () {
                        ;
                    },
                    onComplete: function () {
                        ;
                    }
                });
        }
        catch (e) { alert(e.message); }
    }
</script>

【问题讨论】:

  • 答案是否解决了您的问题?您可以首先验证是否在其他浏览器上调用了 LoggedOffWindow()。将警报放在此函数的第一行。如果警报没有显示,则意味着问题不在于 LoggedOffWindow() 函数,而是它被包装的条件。
  • 你是对的...我发出警报。即使在 IE 和其他浏览器中关闭浏览器时,也不会调用它。我该如何解决它。

标签: javascript session onbeforeunload invalidation


【解决方案1】:

window.event 仅适用于 IE。

而不是这个:

 window.onbeforeunload = function (e)
    {
      if ((window.event.clientX < 0) || (window.event.clientY<0)) // close button
      {
            LoggedOffWindow();
      }
    }; 

使用这个:

window.onbeforeunload = function (e)
{
 e = window.event || e; 
 if ((e.clientX < 0) || (e.clientY < 0))
 {
       LoggedOffWindow();
 }
};

编辑: 检查此链接以获取有用信息: http://www.martinrinehart.com/early-sites/mrwebsite_old/examples/cross_browser_mouse_events.html

【讨论】:

  • 现在有什么问题?第一个问题是您的函数甚至没有在其他浏览器上被调用。你能调试你的程序吗?或者在sanboxed环境中放一个代码sn-p(注释掉ajax调用)所以我们可以看看是否所有浏览器都能够通过你的(window.event.clientX
  • 你好 Jawad...感谢您的回复。我的函数也调用了eariler..但它不适用于 Chrome 和其他浏览器。删除Ajax代码并测试,无进展
猜你喜欢
  • 2013-08-11
  • 1970-01-01
  • 2015-07-03
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 2011-04-11
  • 1970-01-01
相关资源
最近更新 更多