在用户关闭页面时,提示用户有内容未保存-论onbeforeunload事件的用法

简介: 在用户关闭页面时,提示用户有内容未保存-论onbeforeunload事件的用法

onbeforeunload该事件在火狐、谷歌中默认不生效,除非你打开控制台。

可以间接实现,监听页面中输入框是否有值,如果有,则触发,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<input type="text" id="name">
<script>
        const beforeUnloadListener = (event) => {
          event.preventDefault();
          return event.returnValue = "Are you sure you want to exit?";
        };
        const nameInput = document.querySelector("#name");
        nameInput.addEventListener("input", (event) => {
          if (event.target.value !== "") {
            addEventListener("beforeunload", beforeUnloadListener, {capture: true});
          } else {
            removeEventListener("beforeunload", beforeUnloadListener, {capture: true});
          }
        });
</script>
</body>
</html>
效果:

原理:

beforeunload当窗口、文档及其资源即将被卸载时触发该事件。文档仍然可见,此时事件仍然可以取消。

此事件使网页能够触发确认对话框,询问用户是否真的要离开该页面。如果用户确认,浏览器导航到新页面,否则取消导航。

如果将事件直接绑定到window或body中,则在谷歌和火狐中不会触发,因为用户可能与页面没有任何交互,浏览器会忽略,就像浏览器不支持自动播放音视频那样,这时可以在页面中添加一个输入框,然后事件监听该输入框,如果输入框值为空,再触发该事件。

使用说明

该beforeunload事件遭受与该事件相同的问题unload。

特别是在移动设备上,beforeunload事件不会被可靠地触发。例如,beforeunload在以下场景中根本不会触发事件:

  1. 移动用户访问您的页面。
  2. 然后用户切换到不同的应用程序。
  3. 稍后,用户从应用管理器关闭浏览器。

建议开发者beforeunload只在这种场景下监听,并且只有在实际有未保存的更改时才监听,以尽量减少对性能的影响。

相关文章
|
安全 C++
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
2102 0
|
存储 Prometheus Cloud Native
Thanos 工作原理及组件简介
Thanos 工作原理及组件简介
|
机器学习/深度学习 Linux Python
服务器上后台运行python程序
服务器上后台运行python程序
1939 0
|
9月前
|
人工智能 自然语言处理 搜索推荐
2026智慧展厅设计新趋势,AI数字人智慧大屏助力企业展厅价值升级
2026年,智慧展厅迈入AI驱动新阶段,以“智能化、交互化、场景化”为核心,融合AI数字人、大模型与物联网技术,实现语音互动、智能导览、数据联动和业务协同。AI数字人智慧大屏成为企业展示实力的窗口,让展厅从“被动观看”变为“主动体验”,升级为集品牌传播、客户交互与价值转化于一体的智能中枢,推动数字经济发展下展厅形态的全面革新。
1311 0
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
864 0
|
人工智能 机器人 API
人工智能|ChatGPT 的 API 使用
ChatGPT 不仅仅只是具备一个聊天机器人的功能。在其开放了 api 之后,就可以将 GPT 模型强大的能力轻松的通过 API 调用的方式使用。在掌握 ChatGPT api 的基础使用的同时,也可以为后续学习 LangChain 打下重要的基础。
|
缓存 前端开发 JavaScript
前端开发的必修课:如何让你的网页在弱网环境下依然流畅运行?
【10月更文挑战第30天】随着移动互联网的普及,弱网环境下的网页性能优化变得尤为重要。本文从了解弱网环境、优化资源加载、减少HTTP请求、调整弱网参数和代码优化等方面,提供了详细的指南,帮助前端开发者提升网页在弱网环境下的性能,改善用户体验。
1213 3
|
JavaScript
vue拖拽 —— vuedraggable 表格拖拽行
vue拖拽 —— vuedraggable 表格拖拽行
1011 1
|
存储 缓存 安全
如何保证接口幂等性,幂等性到底是干什么的
本文介绍了幂等性原则及其在程序中的应用。首先定义了幂等性,即无论执行多少次,结果不变的特性,并区分了幂等与非幂等操作。接着详细探讨了实现幂等性的策略,如使用唯一标识符、幂等性标记字段、乐观锁版本控制等。最后,通过Java示例展示了如何实现无状态幂等操作,并强调了幂等性在分布式系统和高并发场景下的重要性。
1609 0
|
前端开发
css特效——“凹”和“凸”效果
css特效——“凹”和“凸”效果
628 1

热门文章

最新文章