我正在尝试激活页面重新加载器预防器,并能够停用重新加载器预防器。换句话说,当用户即将卸载/重新加载其页面时,我能够显示一个对话框,但我目前正在寻找一种方法,让用户在某个功能之后卸载/重新加载其页面,而无需任何对话框或警告已被调用。
也许删除事件侦听器会有帮助?
这是我正在使用的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<button onclick="activateReloader()">activate</button>
<button onclick="deactivateReloader()">deactivate</button>
<script>
function activateReloader() {
window.addEventListener('beforeunload', function (e) {
// Cancel the event
e.preventDefault();
// Chrome requires returnValue to be set
e.returnValue = '';
});
}
function deactivateReloader() {
window.removeEventListener('beforeunload', function (e) {});
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
removeEventListener其工作原理是检查传递给它的函数的引用,并查看它是否先前由addEventListener. 这意味着如果您想稍后删除侦听器,则无法将其添加为匿名函数 - 您需要有对它的引用:
function onBeforeUnload(e) {
// Cancel the event
e.preventDefault();
// Chrome requires returnValue to be set
e.returnValue = '';
}
function activateReloader() {
window.addEventListener('beforeunload', onBeforeUnload);
}
function deactivateReloader() {
window.removeEventListener('beforeunload', onBeforeUnload);
}
Run Code Online (Sandbox Code Playgroud)