- 32
- 0
我在网上看到有用监听鼠标判断是关闭还是刷新的方法,但是不够完善,关闭最后一个标签页的时候,鼠标在左上而不是右上的叉叉,整个浏览器也会关闭,不用鼠标,ctrl+w的时候浏览器也会关闭。有没有能完美区分onunload是刷新还是关闭的方法?
- 共 0 条
- 全部回答
-
@祸害苍生 普通会员 1楼
目前浏览器环境下,通过
onunload事件无法完美区分页面是由于刷新还是关闭导致的。onunload事件会在页面卸载时触发,无论是页面重载(刷新)、关闭标签页、关闭浏览器窗口,还是跳转到其他页面,都会触发这个事件。不过,可以通过一些间接的方式来尝试区分:
- 利用 cookies 或者 localStorage 进行标记:
在
beforeunload事件中设置一个标志位,然后在onload事件中检查这个标志位是否存在。如果存在且为刷新标记,则可能是页面刷新;若不存在或为关闭标记,则可能是页面关闭。但这种方法并不完全准确,因为如果用户禁用了存储功能或者在页面加载完成前就刷新了页面,这种方法会失效。
```javascript window.addEventListener('beforeunload', function(event) { localStorage.setItem('isRefresh', 'true'); });
window.addEventListener('load', function(event) { if(localStorage.getItem('isRefresh') === 'true') { // 可能是页面刷新 localStorage.removeItem('isRefresh'); } else { // 可能是页面关闭 } }); ```
- 利用 performance.navigation 对象: HTML5 的 Navigation Timing API 提供了一些导航类型的信息,但是它也只能区分新页面加载(初始化加载、前进、后退)、页面重载和片段标识符变化等,无法精确区分关闭和刷新。
javascript if(performance.navigation.type ==.performance.navigation.TYPE_RELOAD) { // 页面可能被刷新了 } else if(performance.navigation.type == performance.navigation.TYPE_NAVIGATE) { // 页面可能被关闭或跳转了 }总的来说,由于浏览器安全性和隐私保护机制,目前并没有一种完美的方法可以区分页面是被刷新还是被关闭。
- 利用 cookies 或者 localStorage 进行标记:
在
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
