我有这个简单的代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<!--<script src="angular.min.js"></script>-->
<script>
window.onload = function () {
window.addEventListener("unload", function () {
debugger;
});
window.addEventListener("beforeunload", function () {
debugger;
});
window.onbeforeunload = function () {
}
}
</script>
</head>
<body ng-app="app">
</body>
</html>
我希望在刷新页面后触发unload或beforeunload事件。这在Chrome版本67.0.3396.62中没有发生。我试过Firefox和Edge,效果很好。当我关闭选项卡时,它也起作用。只有当我刷新页面时才出现错误。
2条答案
按热度按时间l5tcr1uw1#
您遇到了已报告的issue。它看起来像一个bug,但根据Chrome开发人员(科济),它是一个功能:
感谢repro。它实际上是特征。一旦你按下reload,我们就忽略页面重新加载之前的所有断点。当您有很多断点并且需要重新加载页面以重新启动调试会话时,它总是很有用。
解决方法:您可以使用omnibox导航到相同的url,而不是按reload按钮,然后所有断点将按预期工作。
我已经大胆地强调指出了科济提出的解决方案。我试过了,发现它很有效。
除了
debugger
语句的问题之外,无论您是重新加载还是关闭选项卡,处理程序都会执行。在下面的两种情况下,我都得到了Chrome在返回true时提供的股票提示:这也起作用:
过去,你可以使用一个返回值与消息,浏览器会显示你的自定义消息,但浏览器通常不再支持这一点。
是否要在
load
的处理程序中设置beforeunload
的处理程序 * 完全取决于您的目标 *。例如,我有一个用于编辑文档的应用程序,它直到应用程序开始初始化才设置beforeunload
处理程序,这比load
事件晚得多。beforeunload
处理程序用于确保用户不会在页面上留下未保存的修改。u5rb5r592#
根据[mdn web docs][1]:
需要粘性激活。用户必须与页面进行交互才能使此功能正常工作。
您需要在重新加载之前与页面进行交互,这就是为什么它第一次工作。[1]:https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event#security