当浏览器窗口,文档或其资源将要卸载时,会触发beforeunload事件。
如果处理函数为Event对象的returnValue
属性赋值非空字符串,浏览器会弹出一个对话框,来询问用户是否确定要离开当前页面(如下示例)。没有赋值时,该事件不做任何响应。
概述
- 规范
- HTML5
- 接口
- Event
- 起泡
- 否
- 是否可撤销
- 是
- 目标
- 默认视图
- 默认动作
- Varies (提示用户是否确认离开当前页面).
属性
属性 | 类型 | 描述 |
---|---|---|
target只读 |
EventTarget |
事件目标(DOM 顶层目标) |
|
DOMString |
事件类型 |
bubbles只读 |
Boolean |
事件是否正常起泡 |
cancelable 只读 |
Boolean |
是否可以取消事件 |
returnValue | DOMString |
当前事件返回值(显示给用户的消息) |
示例
window.addEventListener("beforeunload", function (event) { event.returnValue = "\o/"; }); // 等价于 window.addEventListener("beforeunload", function (event) { event.preventDefault(); });
基于WebKit内核的浏览器在弹出提示框时未遵循该规范。跨浏览器可运行的示例,代码基本如下:
window.addEventListener("beforeunload", function (e) { var confirmationMessage = "\o/"; (e || window.event).returnValue = confirmationMessage; // Gecko and Trident return confirmationMessage; // Gecko and WebKit });
注意
该事件处理函数在返回非空值,会提示用户是否关闭页面。在多数浏览器中,返回值会显示在提示框中。Firefox4以及之后版本的浏览器不会向用户显示返回的字符串。取而代之的是,Firefox会展示字符串“This page is asking you to confirm that you want to leave - data you have entered may not be saved”。参见bug 588292。
从2011年5月25号开始,HTML5规范指出在此事件处理函数中,对于window.alert()
, window.confirm()
, 和 window.prompt()
的调用会被忽略。详见HTML5规范说明。
同样需要注意的是许多手机浏览器会忽略该事件处理的返回值(亦即,它们不会要求用户确认,而是直接执行操作)Firefox在about:config中有一个隐藏的设置来做同样的事。其实就是用户确认文档总会被卸载。