Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭浏览器时运行某些代码_Javascript_Jquery - Fatal编程技术网

Javascript 关闭浏览器时运行某些代码

Javascript 关闭浏览器时运行某些代码,javascript,jquery,Javascript,Jquery,我有一个网站,每个页面都需要检查用户是否关闭浏览器,在这种情况下,我运行一些代码(releaseLocking) 因此,在这些页面上,我实现了以下代码: $(window).on('beforeunload', function () { return "Are you sure you wanna quit ?"; }); $(window).unload(function () { releaseLocking(); });

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

因此,在这些页面上,我实现了以下代码:

    $(window).on('beforeunload', function () {
        return "Are you sure you wanna quit ?";
    });
    $(window).unload(function () {
        releaseLocking();
    });
它可以工作,但我注意到,如果我导航到实现此代码的多个页面,在关闭浏览器时,我将多次调用releaseLocking(对于以前访问过的每个页面)

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

你知道怎么做吗

谢谢

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


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

//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是不可能做到的,你需要得到服务器的帮助。

我建议使用
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。

也许可以实现一些代码(在按钮后面)来原谅命令
$(窗口)。在导航到下一个页面之前卸载当前页面的(函数()…
)我认为它应该工作得很好。。尽管感觉有点“黑”。