微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用OnBeforeUnload事件进行浏览器刷新

在用户点击注销按钮的网页上,我有一个JavaScript函数,用于清除存储在MongoDB上的用户会话.它工作正常.

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

我可以阻止此功能调用页面刷新吗?

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

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处理程序的一部分,您可以将带有时间戳的小数据项放入本地存储中.在服务器上激活一种计时器,并等待该时间到期,然后再擦除会话.加载页面后,测试该数据项的本地存储.如果它存在并且时间戳是最近的,你知道页面被刷新并且可以基于知道 – 例如向服务器发送AJAX消息告诉它还没有擦除会话来做适当的事情.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐