js或vue中 如何判断浏览器时关闭还是刷新??
目前接到一个需求如下:
SpringMVC的项目部署后,接入了客户的统一认证平台(基于token的方式),需要实现一个功能,在浏览器第一次访问系统主页时,需要执行一个ajax后台操作,如果多次打开页签则不执行,刷新也不执行,但是如果关闭所有页签后再次打开第一个时,需要执行,也就是说每次打开该网站主页并且只有一个页签打开时,需要执行一个后台方法。
目前我准备的做法是:使用localstorage记录打开主页的次数,每次打开一个就增加一个,刷新不做处理,如果关闭一个就再减去一个,这样只能再第一次打开时调用后台方法,
但是目前遇到一个问题,就是无法判断浏览器时刷新还是关闭,网上找了一些,也没有找到准确的做法,目前主要能兼容谷歌、火狐、360等浏览器就行
求教各位!
回答
用vuex,当页面第一次加载,或者刷新页面时,vuex里面的会恢复到默认状态
有个东西叫sessionStorage,用法同localStorage。不同的是,浏览器关闭后,localStorage里的东西会保存,sessionStorage里面的就会清除sessionStorage并不能满足我的需求
sessionStorage 标记一个值,localStorage 统计窗口数量。
- 代码开始运行,sessionStorage 无标记并且 localStorage 统计为零则执行 ajax 。sessionStorage 设置标记,localStorage 统计加一。
- 关闭或刷新窗口,localStorage 统计减一
回复 @咖啡加糖 : 为什么刷新不能减?要在刷新后 js还没加载出来,用户就把浏览器关闭了,localStorage 统计不就多了吗?你先不要考虑你的做法,用我说的试试。使用到 sessionStorage 、localStorage 和 beforeunload 没什么浏览器兼容问题吧。我这边的需求是刷新不能减,目前就是关闭和刷新这块不好区分,而且涉及到浏览器兼容问题