onbeforeunload 事件异常?

Posted

技术标签:

【中文标题】onbeforeunload 事件异常?【英文标题】:onbeforeunload event exception? 【发布时间】:2021-07-31 07:41:23 【问题描述】:

我想知道是否有办法让 onbeforeunload 事件警报在除特定功能引起的页面重新加载之外的任何其他情况下触发。

之前回答的大多数问题最多是 3 岁。

window.addEventListener('beforeunload', function (e) 

e.preventDefault();

e.returnValue = '';

);

document.getElementById("reload").addEventListener("click", myFunction);

function myFunction() 

location.reload();

  // I WANT TO EXCLUDE THIS FUNCTION FROM ONBEFOREUNLOAD EVENT ALERT
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
</head>
<body>
<button id="reload">RELOAD FROM HERE SHOULD NOT TRIGGER ONBEFOREUNLOAD ALERT</button>
</body>
</html>

【问题讨论】:

【参考方案1】:

一个简单的解决方案是设置一个标志,并在 beforeunload 监听器中检查该标志:

let beforeUnloadAlert = true;
window.addEventListener('beforeunload', function (e) 
  if (!beforeUnloadAlert) return;

  // etc
  e.preventDefault();
  e.returnValue = '';
);
function myFunction() 
  beforeUnloadAlert = false;
  location.reload();

另一种方法是在调用.reload 之前删除侦听器,方法是将侦听器放在命名函数中:

window.addEventListener('beforeunload', unloadHandler);
function myFunction() 
  window.removeEventListener('beforeunload', unloadHandler);
  location.reload();

【讨论】:

以上是关于onbeforeunload 事件异常?的主要内容,如果未能解决你的问题,请参考以下文章

onbeforeunload 事件显示啥元素?

如何截获WebBrowser控件onbeforeunload事件

从 Selenium 测试 onbeforeunload 事件

iPad上的Onbeforeunload事件支持[重复]

React - onbeforeunload 事件从未触发

onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发。