ZBLOG

// import api from '@/store/api'; export default { name: 'App', computed: { assetTag() { return this.$store.getters['global/assetTag']; }, }, watc...

在现代浏览器中,beforeunload 事件的处理方式有所变化。你的代码设置了 event.returnValue = '' 来触发离开页面的提示,但是根据浏览器的安全策略,很多浏览器已经限制了自定义提示信息,只会显示一个默认的确认对话框。

可能的原因和解决方案

  1. 不支持自定义消息:大多数现代浏览器(如 Chrome 和 Firefox)不再允许开发者自定义弹出窗口中的消息内容。它们只会显示一条标准消息,比如 “您确定要离开此页面吗?”。

  2. 确保调用顺序正确:在某些情况下,如果 event.preventDefault()event.returnValue = '' 之前被调用,可能会导致提示无法正常弹出。虽然这通常不会造成问题,但你可以尝试将其顺序调换:

  1. handleBeforeUnload(event) {
  2. const isReload = sessionStorage.getItem('isReload');
  3. if (isReload) {
  4. sessionStorage.removeItem('isReload');
  5. return;
  6. }
  7. // 尝试先设置 event.returnValue,然后调用 preventDefault
  8. event.returnValue = '';
  9. event.preventDefault(); // 可选,有时加上这个可以增加兼容性
  10. },
  1. 加载状态检查:你的逻辑判断用户是否重新加载页面是通过检测 sessionStorage 中的标志来进行。如果你的代码没有正确地设置或移除这个标志,可能会导致 beforeunload 的逻辑不被执行。你可以通过添加一些调试日志来帮助检查这些条件是否被满足。

  2. 确保有活动变更:部分浏览器会忽略未改变任何数据的 unload 提示。例如,如果用户只是查看而没有与页面进行交互,这样的提示可能不会出现。

  3. 不同浏览器测试:确保在不同类型的浏览器中测试这一行为,以排除是特定于某个浏览器的问题。

  4. 注意适用范围:如果你希望关闭窗口后触发某些操作,如清理登录状态等,可以考虑结合使用其他事件,例如使用 visibilitychange 来处理切换或最小化行为。

最终调整后的代码示例

  1. methods: {
  2. handleBeforeUnload(event) {
  3. const isReload = sessionStorage.getItem('isReload');
  4. if (isReload) {
  5. sessionStorage.removeItem('isReload');
  6. return;
  7. }
  8. // 按照顺序设置返回值和防止默认行为
  9. event.returnValue = '';
  10. event.preventDefault();
  11. },
  12. }

此外,你可以考虑使用网络请求来记录登出状态,但请注意,它需要在页面卸载前完成。建议使用 navigator.sendBeacon() 方法发送数据,因为该方法在文档卸载时工作得更好,不容易被取消。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?