window-onbeforeunload 的使用

window-onbeforeunload 的使用官方定义 onbeforeunlo 事件在即将离开当前页面 刷新或关闭 时触发 该事件可用于弹出对话框 提示用户是继续浏览页面还是离开当前页面 使用场合当我们界面中有未提交的表单 或者有未保存的文本内容 用户点击关闭按钮 需要浏览器弹出提示框 就需要使用这个事件 onbeforeunlo 调用方式 window addEventList beforeunload func

官方定义

onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发。该事件可用于弹出对话框,提示用户是继续浏览页面还是离开当前页面。

使用场合

当我们界面中有未提交的表单,或者有未保存的文本内容,用户点击关闭按钮,需要浏览器弹出提示框,就需要使用这个事件 onbeforeunload

调用方式

window.addEventListener('beforeunload', function (e) { 
    // Cancel the event e.preventDefault(); // Chrome requires returnValue to be set e.returnValue = '自定义文本'; }); // 当然,也可以通过以下方式调用: window.onbeforeunload = function(event) { 
    ... }; 

或者在body标签上绑定onbeforeunload,但更推荐使用addEventListener的方式调用。

HTML规范建议作者使用 Event.preventDefault() 而非 Event.returnValue 的方式来提示用户。但是,该种方法还没有得到全部浏览器的支持,所以需要配合使用。

React 中使用

在 React 中,需要在 DidMount 阶段监听这个事件,在 willunmount 阶段释放这个事件的回调函数。

componentDidMount() { 
    window.onbeforeunload = this.onbeforeunload; } componentWillUnmount() { 
    window.onbeforeunload = null; } onbeforeunload = () => { 
    // handle unsaved file return ''; } 

界面提示文本

当事件返回值不是null或者undefined时,用户将会被提醒是否离开页面。(但测试后发现即便返回null或者undefined,弹出框也会被展示)。

如果不需要展示弹窗,不使用 Event.preventDefault(),Event.returnValue即可。

returnValue自定义文本无效原因:在旧版本浏览器中,事件的返回值会被展示在对话框中。但从Firefox 44,Chrome 51,Opera 38,和Safari 9.1以后,返回文本将不会被展示,换言之,无法自定义弹窗提示文本。

默认的提示文本如下:

Firefox(66.0.3)“此页面想询问您是否要离开 - 您输入的数据可能不会被保存” Safari(10.1.2)“您确定要离开此页面吗?” Chrome(74.0.3729.131)“重新加载此网站?”“系统可能不会保存您所做的更改。” 

alert,confirm,prompt不执行

在一些浏览器中,在onbeforeunload中调用alert,confirm,prompt等方法会被忽略。

onbeforeunload无效

之前遇到的情况是,在chrome中onbeforeunload事件时而执行时而失效,以为是浏览器的兼容问题,百思不得其解,但后来发现如下解释:As of Chrome 60, the confirmation will be skipped if the user has not performed a gesture in the frame or page since it was loaded

在Chrome和Firefox中,页面加载完成后,如果用户未对页面进行操作,比如“点击”、“输入”等等,onbeforeunload将不会被执行。

而在Safari中onbeforeunload总是会被执行。

需要指出的是,许多浏览器会忽略该事件并自动关闭页面无需用户的确认。

火狐浏览器在配置页面about:config设有一个dom.disable_beforeunload的开关变量用于开启这个功能。

参考文档

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/onbeforeunload

https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload

https://www.runoob.com/jsref/event-onbeforeunload.html

https://blog.csdn.net/u0/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222542.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午3:33
下一篇 2026年3月17日 下午3:34


相关推荐

  • C++中关键字volatile和mutable用法

    C++中关键字volatile和mutable用法C C 中的 volatile 关键字和 const 对应 用来修饰变量 用于告诉编译器该变量值是不稳定的 可能被更改 使用 volatile 注意事项 1 编译器会对带有 volatile 关键字的变量禁用优化 Avolatilespe

    2026年3月18日
    1
  • 简单的udp攻击_udp flood攻击

    简单的udp攻击_udp flood攻击由于本人很菜,这个代码是改别人的.呵呵.可以在公司的局域网里搞搞坏,呵呵.我是在ubuntu8.04下的,需要gcc编译.这个也添加了广播,整个网段的人都能收到了#include#include#include#include//ip#include//tcp#include#includeunsignedshortip_su…

    2022年10月2日
    7
  • 机器学习算法整理(内含代码)

    机器学习算法整理(内含代码)一般来说,机器学习有三种算法:1.监督式学习 监督式学习算法包括一个目标变量(也就是因变量)和用来预测目标变量的预测变量(相当于自变量).通过这些变量,我们可以搭建一个模型,从而对于一个自变量,我们可以得到对应的因变量.重复训练这个模型,直到它能在训练数据集上达到理想的准确率属于监督式学习的算法有:回归模型,决策树,随机森林,K近邻算法,逻辑回归等算法2.无监督式算法无监督式学

    2022年6月18日
    38
  • postman虚拟服务器教程,postman使用教程详解

    postman虚拟服务器教程,postman使用教程详解postman使用教程详解[2021-02-1304:18:39]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace(“/(\s|\&nbsp\;| |\xc2\xa0)/”,””,strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教下面由Redis教程栏目给大家介绍关Redis中的Scan命令的使…

    2022年5月6日
    89
  • linux查看磁盘使用情况命令

    linux查看磁盘使用情况命令第一 统一磁盘整体情况 包括磁盘大小 已使用 可用 1 查看当前目录命令 df h 结果 统一每个目录下磁盘的整体情况 2 查看指定目录在命令后直接放目录名 比如查看 usr 目录使用情况 df h usr 结果 统一了指定目录一使用情况 及分配的最大空间第二 具体查看文件夹的占用情况 1 查看当前目录每个文件夹的情况 命令 dumax depth 1 h 结果如下

    2026年3月19日
    3
  • Lua使用心得(2)

    在lua脚本调用中,如果我们碰到一种不好的脚本,例如:while1dodoend那我们的程序主线程也会被阻塞住。那我们如何防止这种问题呢?下面就给出一个解决的办法。首先为了不阻塞主线程,

    2021年12月25日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号