我正在尝试通过 Gatsby 实现以下目标
- 用户在表单页面上,如果他们点击浏览器的后退按钮,会出现一个弹出窗口,询问他们是否要离开。
- 如果用户选择
ok
,那么它将返回。 - 如果用户选择
cancel
,那么它将停留在此页面上
通过执行以下操作,我能够“几乎”实现它
useEffect(() => {
const confirmExit = e => {
const leaveThisPage = window.confirm("Would you like to leave this page?")
if (!leaveThisPage) {
window.history.forward()
}
}
window.addEventListener("popstate", confirmExit)
return () => {
window.removeEventListener("popstate", confirmExit)
}
}, [])
有一个问题,如果用户选择cancel
,那么浏览器会转到上一页。然后window.history.forward()
会开火并将他们送回去。
我注意到该popstate
事件无法取消,因此e.preventDefault()
无法正常工作。
注意:我也尝试使用 进行测试window.onbeforeunload
,但它仅在我关闭窗口或我以前来自我的应用程序之外时触发。我的问题有解决办法吗?