gpt4 book ai didi

javascript - 使用 OnBeforeUnload 事件刷新浏览器

转载 作者:可可西里 更新时间:2023-11-01 09:10:52 25 4
gpt4 key购买 nike

在网页上,当用户点击注销按钮时,我有一个 JavaScript 函数可以清除存储在 MongoDB 上的用户 session 。它工作正常。

我还想在用户关闭浏览器时清除用户 session 。这是我面临的问题:当用户单击刷新图标时,将调用注销功能。我只希望在浏览器关闭时调用此函数。

我可以阻止这个函数在页面刷新时调用吗?

我这里的逻辑是在浏览器关闭时清理 session 。我正在删除 MongoDB 上的 session 。有没有更好的方法来管理 session ?

var isRefresh = false;
$(window).keydown(function (event) {
if (event.keyCode == 116) { // User presses F5 to refresh
refresh = true;
}
});

// Calls the logout function when you close the browser thus cleans the session data.
var windowsCloseEventListener = window.attachEvent || window.addEventListener;
var chkForBrowserCloseEvents = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable
windowsCloseEventListener(chkForBrowserCloseEvents, function (e) { // For >=IE7, Chrome, Firefox
if (!isRefresh) {
$scope.logout();
}
});

最佳答案

据我所知,您实际上无法测试浏览器是否已关闭;您只能测试关闭的窗口(或选项卡)。这通常就足够了,除非当然发生页面刷新,因为它算作在窗口或选项卡内关闭和重新打开网页。需要的是用于单击浏览器页面刷新按钮的事件处理程序,但我不确定是否存在这样的事件处理程序。这是一些东西:

How to show the "Are you sure you want to navigate away from this page?" when changes committed?

还有

Handling Browser close event and Page Refresh

我在尝试查找有关页面刷新事件处理程序的内容时遇到的一件事是使用“本地存储”的概念。作为 on-before-unload 处理程序的一部分,您可以将带有时间戳的小数据项放入本地存储中。在服务器上激活一种计时器,并在删除 session 之前等待该时间到期。加载页面后,测试该数据项的本地存储。如果它存在并且时间戳是最近的,您就知道页面已刷新并且可以根据知道的情况做适当的事情——比如向服务器发送一条 AJAX 消息,告诉它暂时不要删除 session 。

关于javascript - 使用 OnBeforeUnload 事件刷新浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com