我有这个简单的代码
<!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,效果很好。当我关闭选项卡时它也有效。仅当我刷新页面时才会出现该错误。
你遇到了一个这已经被报道过。它看起来像一个错误,但根据Chrome 开发者 (kozy) https://bugs.chromium.org/p/chromium/issues/detail?id=801975#c5 这是一个特点:
感谢您的重现。它实际上是功能。一旦您按下重新加载,我们就会忽略页面重新加载之前的所有断点。当您有很多断点并且需要重新加载页面以重新启动调试会话时,它始终很有用。
解决方法:您可以使用多功能框导航到相同的 url,而不是按重新加载按钮,然后所有断点都将按预期工作。
我加粗强调指出了 kozy 提出的解决方法。我试过了,发现它有效。
除了问题之外debugger
语句,无论您是重新加载还是关闭选项卡,都会执行处理程序。在接下来的两种情况下,我都会收到 Chrome 在返回 true 时提供的股票提示:
window.addEventListener("beforeunload", function (ev) {
ev.returnValue = true; // `return true` won't work here.
});
这也有效:
window.onbeforeunload = function () {
return true;
}
过去,您可以在消息中使用返回值,浏览器将显示您的自定义消息,但浏览器通常不再支持这一点。
是否要设置处理程序beforeunload
在处理程序内load
is 完全取决于你的目标。例如,我有一个用于编辑文档的应用程序,但没有设置beforeunload
处理程序直到应用程序开始初始化,这比load
事件。这beforeunload
处理程序的作用是确保用户不会离开未保存修改的页面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)