ZBLOG

import api from '@/store/api'; export default { name: 'App', data() { return { isReload: false, }; }, computed: { assetTag() { return th...

在你提供的代码中,handleBeforeUnload 方法会在用户关闭窗口或刷新页面时被触发。由于在此方法中进行了一些登出和清除存储的操作,这导致用户每次刷新页面都会退出登录。

如果你的意图是让用户在刷新页面时不执行登出操作,而只在真正关闭浏览器标签时才执行,那么你需要对逻辑进行调整。具体可以采用以下方式:

解决方案

  1. 使用 visibilitychange 事件:检测用户是否离开页面,但这不是所有浏览器都能完美支持。
  2. 确认只在关闭窗口时才执行登出逻辑

更新后的 handleBeforeUnload 函数示例:

  1. handleBeforeUnload(event) {
  2. // 在这里,我们只希望处理当用户尝试关闭窗口或标签页的情况
  3. event.preventDefault(); // 防止默认行为
  4. event.returnValue = ''; // Chrome 的标准用法,触发默认的确认提示
  5. // 判断是否为真正的关闭操作,不是刷新的情况
  6. const navEntries = performance.getEntriesByType('navigation');
  7. if (navEntries[0]?.type !== 'reload') {
  8. console.log('Page is closing');
  9. // 执行登出逻辑
  10. api.post('/logout', { data: [] });
  11. sessionStorage.removeItem('TOKEN');
  12. localStorage.removeItem('storedUsername');
  13. } else {
  14. console.log('Page is being refreshed, skipping logout.');
  15. }
  16. }

改动说明:

  • 我们使用了 performance.getEntriesByType('navigation') 来判断当前导航类型。如果类型不是 'reload',则认为用户是要关闭页面,因此才执行登出的逻辑。
  • 增加了一些日志输出,以帮助调试和验证逻辑。

注意事项:

  • 请确保所有API调用都是异步处理,并且考虑到可能出现的任何错误。
  • 确认 API 调用不会影响用户体验,例如添加加载指示器或者其他通知方式来告知用户状态。

这样修改后,当用户刷新页面时就不会再自动执行登出操作了。希望这能帮到你!如有其他问题,请随时询问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22894

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?