3

我有一个网站,每个页面都需要检查用户是否关闭浏览器,在这种情况下我运行一些代码(releaseLocking)。

所以在这些页面上我已经实现了这个代码:

    $(window).on('beforeunload', function () {
        return "Are you sure you wanna quit ?";
    });
    $(window).unload(function () {
        releaseLocking();
    });

它有效,但我注意到,如果我导航到实现此代码的多个页面,则在关闭浏览器时,我将多次调用 releaseLocking(对于每个先前访问的页面)。

我宁愿只为真正活跃的最后一页运行此代码。你明白我的意思吗?

你知道如何进行吗?

谢谢。

4

3 回答 3

1

我建议使用localStorage这个。由于 localStorage 存储每个域的变量,因此您可以检查代码是否已经执行。localstorage也是和session绑定的,所以在浏览器完全关闭后,你的session就没了,导致localStorage被清空,不会干扰下一个session。

$(window).on('beforeunload', function () {
        return "Are you sure you wanna quit ?";
});
$(window).unload(function () {
    if ( !localStorage.getItem('lockReleased') ) {
        releaseLocking();
        localStorage.setItem('lockReleased', true)
    }
});

上面的代码将为关闭的第一个窗口将 localStorage 变量设置lockReleased为 true。其他窗口将看到该值,并且不会调用 releaseLocking。

于 2013-06-09T12:07:38.357 回答
0

据我所知,不可能从浏览器导航中单独检测到浏览器关闭。浏览器不向窗口提供该信息。

SEE HERE ALSO

于 2013-06-09T11:57:38.623 回答
0

我不确定这是唯一的方法(不是最好的方法),无论如何你应该能够保存用户的一种会话,并且每次都向服务器询问页面是否是最后一次打开的。

//the var declaration goes at the beginning of the script
var isLastPage = false;
$(window).on('beforeunload', function () {
    //ajax request, the callback will set isLastPage to true if it is the last page opened by the user with that session.
});
$(window).unload(function () {
    if(isLastPage) releaseLocking();
});

服务器端您应该创建一个会话来存储用户的所有页面(记住在用户关闭页面或打开新页面时通过 JS 更新它)。我认为只有通过JS是不可能做到的,需要服务器的帮助。

于 2013-06-09T12:01:36.403 回答