首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议128:推荐使用beforeunload事件

关灯直达底部

unload表示卸载的意思,这个事件在从当前浏览器窗口内移动文档的位置时触发,也就是说,在通过超链接、前进或后退按钮等从一个页面跳转到其他页面,或者关闭浏览器窗口时触发。例如,下面函数的提示信息将在卸载页面时发生,即在离开页面或关闭窗口前执行。


window.onunload=f;

function f{

alert("888");

}


在unload事件中无法有效阻止默认行为,因为该事件结束后,页面将不复存在。由于在窗口关闭或离开页面之前只有很短的时间来执行事件处理函数,因此不建议使用该事件类型。使用该事件类型的最佳方式是取消该页面的对象引用。

beforeunload事件与unload事件功能相近,不过它更人性化,如果beforeunload事件处理函数返回字符串信息,那么该字符串会显示在一个确认对话框中,询问用户是否离开当前页面。例如,运行下面的示例,当刷新或关闭页面时,会弹出提示信息。


window.onbeforeunload=function(e){

return"你的数据还没有保存呢!";

}


beforeunload事件处理函数的返回值可以为任意类型,IE和Safari浏览器的JavaScript解释器能够调用toString方法把它转换为字符串,并且将字符串信息显示在提示对话框中。而对于Firefox浏览器来说,则会把返回值视为空字符串显示。如果beforeunload事件处理函数没有返回值,则不会弹出任何提示对话框,此时beforeunload事件与unload事件响应效果相同。

虽然beforeunload不是标准事件类型,但是它获得绝大数主流浏览器的支持,目前仅有Opera浏览器不支持该事件类型。使用该事件类型可以在用户离开页面时提醒是否保存数据或完成相关操作。