账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    有没有完美区分onunload刷新还是关闭的方法?
    32
    0

    我在网上看到有用监听鼠标判断是关闭还是刷新的方法,但是不够完善,关闭最后一个标签页的时候,鼠标在左上而不是右上的叉叉,整个浏览器也会关闭,不用鼠标,ctrl+w的时候浏览器也会关闭。有没有能完美区分onunload是刷新还是关闭的方法?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • @祸害苍生 普通会员 1楼

      目前浏览器环境下,通过 onunload 事件无法完美区分页面是由于刷新还是关闭导致的。onunload 事件会在页面卸载时触发,无论是页面重载(刷新)、关闭标签页、关闭浏览器窗口,还是跳转到其他页面,都会触发这个事件。

      不过,可以通过一些间接的方式来尝试区分:

      1. 利用 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 { // 可能是页面关闭 } }); ```

      1. 利用 performance.navigation 对象: HTML5 的 Navigation Timing API 提供了一些导航类型的信息,但是它也只能区分新页面加载(初始化加载、前进、后退)、页面重载和片段标识符变化等,无法精确区分关闭和刷新。

      javascript if(performance.navigation.type ==.performance.navigation.TYPE_RELOAD) { // 页面可能被刷新了 } else if(performance.navigation.type == performance.navigation.TYPE_NAVIGATE) { // 页面可能被关闭或跳转了 }

      总的来说,由于浏览器安全性和隐私保护机制,目前并没有一种完美的方法可以区分页面是被刷新还是被关闭。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部