嗨,我正在尝试实现“您确定要离开此页面吗?” 导航离开带有尚未提交的已修改表单的页面时弹出。该网站是使用自定义框架构建的单页应用程序。
由于所有锚链接都由框架处理,因此可以看出单击侧导航链接将导致页面更改并显示 Bootstrap 确认对话框。如果用户单击“确定”,则单击通过并进行 AJAX 调用以提取新页面内容。如果他们单击“取消”,则模式将被解除并停留在当前页面上。
我无法解决的部分是用户在其网络浏览器中单击“返回”按钮时。这会触发“popstate”事件。所有导航/历史都使用历史 API 进行管理,因为它是一个单页应用程序。
问题是当有人点击“返回”时,URL 会在“popstate”发生后发生变化,然后我会显示“你确定要离开吗?” 模态的。当事件发生时,地址栏中的 URL 现在会显示您将从历史记录中转到的页面,而不是您当前正在查看的页面。如果您在引导程序中单击“取消”,请确认您现在在地址栏中显示错误的 URL。
event.preventDefault、event.stopPropagation 或在 popstate 中返回 false 不会阻止 URL 更改。AFAIK 你不能在“popstate”之前拦截“Back”按钮。尝试在“popstate”中使用 window.history.replaceState 似乎也不起作用。
有没有人有关于如何使这项工作的解决方案?
- 你能阻止 URL 在“popstate”事件中发生变化吗?
- 您能否以某种方式在“popstate”中重写历史记录以将 URL 更改回它在当前页面上的内容并保留先前的条目,如果您确实决定在接受模式后希望它通过?
- 其他一些我没有想到的解决方案?
我最初的想法是阻止“popstate”中的 URL 更改,然后让框架触发链接单击以加载新内容并在单击“是”时更改 URL,但我还没有找到这样做的方法。
谢谢!