我想在用户离开页面之前设置一些逻辑,但我想处理重新加载按钮&关闭按钮动作不同。 我所知道的是,在用户卸载页面之前会调用 onbeforeunload 事件,但它无法解决我的用例。
我想创建一些统计/跟踪器,如下所示:
$(window).beforeunload(function() {
if (user click browser's close button)
// track_user_click_close_button()
else if (user click browser's reload button)
// track_user_click_reload_button()
});
答案 0 :(得分:1)
您无法知道用户将导航到的网址。这不是jquery / js问题。 底线是 - 你不能做你想做的事。
但如果你有时尝试,你可能会发现 - 你得到了你需要的东西。
正如本SO answer中提到的类似问题,是可以做些什么来克服这种无能。我强烈建议你阅读所描述的方法。
如果它不符合您的需求,请打开一个新的SO问题,详细解释您正在尝试做什么,我们会尽力帮助您
不幸的是,没有办法确定这个开箱即用的方法。您可以尝试以下方法:
$(window).beforeunload(function() {
// should be a synchronous AJAX-call, as async one won't work
persistLeaveOnServer();
});
$.ready(function() {
tellServerWeAreBack();
});
在服务器端,您应该根据它维护会话状态。一旦经过了一定的时间(可能是几秒钟),您认为会话已结束并将统计信息保留为UserClickClose
。如果在此时间过去之前收到tellServerWeAreBack
请求,则会保存UserClickRefresh
统计值。
答案 1 :(得分:0)
beforeunload
都会触发。如果要在刷新和关闭之间进行区分,则必须能够检测页面重新加载。
您可以在xx:xx时间保留一条告诉页面正在卸载的信息。将事实记录到某个地方。加载页面时,检查是否有一些记录证明该页面最近已退出(取决于您最近的定义)并将事件转换为刷新事件:(有关示例,请参阅here)
这可能无法区分刷新和用户关闭然后快速重新打开页面(在您的时间阈值下)。
注意:链接页面提到使用隐藏的表单元素,这些元素在刷新之间保持不变,但是表示浏览器支持遍布整个地方;我想知道是否仍然如此。存储信息in the window object将在刷新后继续存在,因此您可能希望探索此途径