我有一个网站,每个网页都需要检查用户是否关闭了浏览器,在这种情况下我运行了一些代码(releaseLocking)。
所以在这些页面上我实现了这段代码:
$(window).on('beforeunload', function () {
return "Are you sure you wanna quit ?";
});
$(window).unload(function () {
releaseLocking();
});
它有效但我注意到如果我导航到实现此代码的多个页面,关闭浏览器时,我将多次调用releaseLocking(对于每个以前访问过的页面)。
我更希望只运行此代码才能使最后一页真正活跃。你明白我的意思吗?
你知道如何继续吗?
感谢。
答案 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)
据我所知,无法单独检测浏览器 来自浏览器导航。浏览器不提供 带有该信息的窗口。
答案 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才能做到这一点,你需要得到服务器的帮助。