Angular:关闭窗口时的用户注销

时间:2014-03-26 13:49:34

标签: javascript angularjs

我有一个角度应用程序,当用户登录时,我在db上将其状态设置为“online”。 如果此用户关闭浏览器,而不是执行菜单操作注销,如何将其状态更新为“脱机”? 我尝试使用“$ window.onbeforeunload”事件并调用Web服务来注销用户。 代码运行但似乎执行将被浏览器“切断”:服务永远不会被称为“真正”。

2 个答案:

答案 0 :(得分:2)

有一点需要注意的是,所有浏览器都不支持onbeforeunload事件,这是一个非标准事件。

此外,只要用户提交表单,导航到页面外等,您的用例就会发出触发该事件的警告。

您需要从onbeforeunload中过滤掉那些“事件”,以确保您的逻辑只会在实际窗口关闭时执行。

你可以使用jQuery做到这一点:

    var ignore;
    $('a').live('click', function() { ignore = true; });

    etc...

    $(window).bind("beforeunload", function() { 
        return ignore || confirm("Do you want to close the browser/tab?"); 
    });

问题是,即使这样,在点击OK之后,任何后续代码都不会被执行,因为......好吧,窗口实际上是关闭的:)

你能做到这一点的唯一方法就是,出于某种尴尬的原因,你可以在你的逻辑被执行时“阻止”关闭窗口,然后关闭它。

FORTUNATELY 这是不可能的。

因此,这使您无法正常执行此操作,这是在服务器端,检查会话过期或类似的事情。

答案 1 :(得分:2)

使用WebSocket连接或轮询,并侦听它以关闭/停止服务器。

正如@António所说,你不能依赖客户一直通知你它正在关闭。