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