如何捕获浏览器关闭事件?

Posted

技术标签:

【中文标题】如何捕获浏览器关闭事件?【英文标题】:How to capture browser close event? 【发布时间】:2011-10-01 03:15:59 【问题描述】:

我想在我的应用程序中捕获浏览器关闭事件并向用户显示一个确认框。 我正在使用 JSF 2.0 和 Richfaces 4.0。

【问题讨论】:

【参考方案1】:

将处理程序附加到unload 事件。

【讨论】:

我尝试了 onbeforeunload 事件。但问题是当我刷新页面或进行任何表单提交时,它也会调用 onbeforeunload 事件。 没有办法区分它们;浏览器只能告诉你当前文档即将被替换。这不会让你知道为什么【参考方案2】:

onbeforeunload

< body onbeforeunload="alert('Closing');">

示例:

<html> 
<head>
<title>`onbeforeunload` Event Demo</title>
</head>
<body onbeforeunload="return 'Are you sure you want to exit ?';">
</body> 
</html> 

【讨论】:

beforeunload 事件旨在返回 string。 Docs. @Alex 感谢您提供的信息。 OP 只想要一个函数调用【参考方案3】:

使用beforeunload 事件。

window.onbeforeunload = function(event) 

    event = event || window.event;

    var confirmClose = 'Are you sure?';

    // For IE and Firefox prior to version 4
    if (event) 
       event.returnValue = confirmClose;
    

    // For Safari
    return confirmClose;


请记住,除了关闭窗口之外的其他事件(例如重新加载和表单提交)也会触发此事件。

【讨论】:

Alt-F4也一样,关闭导航器(tab或者X)也关闭F5键,回发再重新加载?【参考方案4】:
window.onbeforeunload = function () 

  var shallIAlertUser = Do_Whatever(); //get boolen value
  if (shallIAlertUser) 
    //this will alert user
    return 'Are you sure?';
  
  else 
    //this wont
    window.onbeforeunload = undefined;
  
;

【讨论】:

以上是关于如何捕获浏览器关闭事件?的主要内容,如果未能解决你的问题,请参考以下文章

JS捕获关闭浏览器事件之chrome浏览器真支持onbeforeunload事件吗

js获取关闭浏览器事件

在文本框中捕获TAB键[关闭]

用于跨浏览器事件支持的轻量级库 [关闭]

abap关闭弹出子窗口

如何在 Angular 中处理浏览器选项卡关闭事件?只关闭不刷新