如何在 c# 中关闭任何浏览器时从 XMPP 注销?
Posted
技术标签:
【中文标题】如何在 c# 中关闭任何浏览器时从 XMPP 注销?【英文标题】:How to logout from XMPP while closing any browser in c#? 【发布时间】:2017-12-01 04:33:17 【问题描述】:当用户不在我的网站时,我想从 XMPP 注销或关闭我的连接。
我的问题是:我必须为此编写一些 jquery 事件还是进行 ajax 调用?
我在注销按钮点击事件中编写了这段代码。
XmppClient client = (XmppClient)Session["XMPP"];
if (client != null)
client.Close();
client.Dispose();
我不知道Global.asax
文件中是否有可用的事件。
或者请提供另一种方法。
【问题讨论】:
【参考方案1】:在此处查看答案:javascript register window/tab closing event before window/tab close。
使用window.onbeforeunload
(MDN article) 事件,您可以分配一个事件侦听器来触发可以完成您的XmppClient
的AJAX 调用:
window.onbeforeunload = function (event)
$.ajax('/api/route/specifically/to/finalize/xmpp')
;
当然,请务必检查 browser compatibility (MDN) 是否是您需要的。例如,Edge 不支持此事件。当涉及到那个特定的事件处理程序时,IE 显然是不确定的。您还可以参考替代"beforeunload" event,即apparently more widely supported。它看起来像这样:
window.addEventListener("beforeunload", function (event)
$.ajax('/api/route/specifically/to/finalize/xmpp')
);
另外请注意,如果浏览器崩溃,或者某些其他意外事件导致窗口关闭,而浏览器可能无法在窗口关闭之前触发该事件,这将不起作用。
您还可以考虑Global.aspx
中的Session_End
事件:On-Session-expire-event? 和MSDN article:
public void Session_OnEnd()
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
这将在“调用 Abandon 方法或会话过期时”运行(根据 MSDN)。
【讨论】:
以上是关于如何在 c# 中关闭任何浏览器时从 XMPP 注销?的主要内容,如果未能解决你的问题,请参考以下文章
在 Master 上点击新项目时从 Detail viewController 中关闭模式
我如何只能在任何现代浏览器(如 chrome、firefox、safari、opera、IE 以及任何版本的通用 javascript [重复])中关闭当前选项卡
当应用程序在 iOS 中关闭且应用程序未在后台运行时从推送通知中获取数据