关闭浏览器时运行一些代码

时间:2013-06-09 11:54:49

标签: javascript jquery

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

所以在这些页面上我实现了这段代码:

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

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

我更希望只运行此代码才能使最后一页真正活跃。你明白我的意思吗?

你知道如何继续吗?

感谢。

3 个答案:

答案 0 :(得分:1)

我建议使用localStorage。由于localStorage存储每个域的变量,因此它允许您检查代码是否已经执行。 Localstorage也绑定到会话,因此在浏览器完全关闭后,您的会话将消失,导致localStorage被清除,因此它不会干扰下一个会话。

$(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。

答案 1 :(得分:0)

  

据我所知,无法单独检测浏览器   来自浏览器导航。浏览器不提供   带有该信息的窗口。

SEE HERE ALSO

答案 2 :(得分: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才能做到这一点,你需要得到服务器的帮助。