ela*_*ndo 5 javascript google-chrome
我有这个简单的代码
<!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>Run Code Online (Sandbox Code Playgroud)
我希望在刷新页面后触发 unload 或 beforeunload 事件。这在 Chrome 版本 67.0.3396.62 中没有发生。我试过 firefox 和 edge,效果很好。当我关闭选项卡时它也有效。只有当我刷新页面时才会发生错误。
您遇到了一个已经报告的问题。它看起来像一个错误,但根据Chrome 开发人员(kozy)的 说法,它是一个功能:
感谢复刻。它实际上是功能。只要您按下重新加载,我们就会在页面重新加载之前忽略所有断点。当您有很多断点并且需要重新加载页面以重新启动调试会话时,它一直很有用。
解决方法:您可以使用多功能框导航到相同的 url,而不是按重新加载按钮,然后所有断点都将按预期工作。
我添加了大胆的重点来指出 kozy 提出的解决方法。我试过了,发现它有效。
除了debugger语句的问题之外,无论您是重新加载还是关闭选项卡,都会执行处理程序。在接下来的两种情况下,我都会收到 Chrome 在返回 true 时提供的股票提示:
window.addEventListener("beforeunload", function (ev) {
ev.returnValue = true; // `return true` won't work here.
});
Run Code Online (Sandbox Code Playgroud)
这也有效:
window.onbeforeunload = function () {
return true;
}
Run Code Online (Sandbox Code Playgroud)
过去,您可以将返回值与消息一起使用,浏览器会显示您的自定义消息,但浏览器通常不再支持这一点。
无论你想设置的处理程序beforeunload的处理程序内load是完全依赖于你的目标。例如,我有一个用于编辑文档beforeunload的应用程序,它在应用程序开始初始化之前不会设置处理程序,这比load事件晚得多。该beforeunload处理器是有,以确保用户不与未保存的修改离开页面。
| 归档时间: |
|
| 查看次数: |
4867 次 |
| 最近记录: |