有没有办法检测用户何时离开页面,无论是关闭浏览器,在地址栏中输入新URL,点击重定向到其他域的链接等等?
这样做的主要目的是执行一些活动,例如:
我正在尝试使用窗口的卸载和beforeunload事件,并阅读其他问题,例如: Best way to detect when a user leaves a web page? // Is there any way to know that user leaving a page with asp.net?但我找不到我期望的答案。
这是一个简化的js片段,用于理解我的尝试:
window.onunload = function(){
if (theConditionThatINeed){
doThings();
SyncWithServerAndAbandonSession(url, localObjects);
}
else {
doNothing();
}
}
我不希望在用户离开之前显示任何类型的确认,所以我认为 onbeforeunload 对我没有帮助。
假设答案是“无法做到这一点”,那么完成同步和会话清算的建议做法是什么?
我支持的主浏览器是IE> = 7
答案 0 :(得分:1)
正如您已经读过的那样,无法可靠地检测用户是否离开您的页面。 通常,在客户端存储任何未同步状态是不好的做法。浏览器很容易被关闭或崩溃。
如果用户在您的网页上执行任何操作,您可以通过javascript向自己发送ajax keepalive消息。再次,非常不可靠,浪费和hacky。 短暂超时后自动同步。
查看REST个完整的网络应用程序。这个概念很有意思,并且非常简洁地说,不鼓励在服务器上保存状态信息。您也可以将此应用于客户端。
这通常会导致将状态信息保存在URL中。 URL告诉服务器为服务请求需要知道的任何内容,它不需要任何先前活动的内存(会话)。 我尝试仅在会话中保留用户标识信息。我也会摆脱这个,但是一些工具和库需要会话中的用户。