取消/中止/确认HTML 5状态更改事件(onpopstate)。

6
使用窗口的unload事件,可以向用户显示确认对话框。例如,在等待完成某个请求的情况下导航离开页面将终止该请求。
是否有办法在HTML5历史记录API的onpopstate中实现这一点?或者有没有其他达到相同结果的方法?
2个回答

0

我不知道这是否有助于您的情况,但是 Sammy.js 是一个流行的哈希路由库,具有 before 处理程序。我在我的应用程序中使用它来记录先前访问的哈希,如果它是我想要阻止他们离开的哈希,则返回 false 将使他们停留在该页面上。您仍然需要重写 URL 以显示先前的页面,但似乎正在工作。

有关更多信息,请参见此其他线程中的我的答案


0
我猜您可以修改 pushState 的行为,在推送新状态之前要求确认:
// Store original pushState
var _pushState = window.history.pushState;
// Some bad global variable to determine if confirmation is needed
var askForConfirm = true;
// Modify pushState behavior
window.history.pushState = function() {
    if(!askForConfirm || confirm('Are you sure you want to quit this page ?')) {
        // Call original pushState
        _pushState.apply(window.history,arguments);
    }
};

但是这并没有处理用户触发事件的情况(例如通过按下返回按钮)。 - Mansour
嗯,那么也许可以在onpopstate事件上处理这个问题,通过存储先前的状态并在取消的情况下将其推回来...看起来有点棘手。 - Golmote Kinoko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接