取消导致哈希值或HTML5历史记录更改的后退或前进事件

3

是否有可能取消导致哈希更改或HTML 5历史更改的浏览器后退或前进事件,就像可以通过window.onbeforeunload取消页面加载的后退或前进事件一样?


从事件回调中返回 false 怎么样? - qwertymk
@qwertymk 我尝试过了,但对于 onhashchange 或 onpopstate 没有起作用。 - Max Nanasy
尝试使用点击处理程序进行注册。 - qwertymk
@qwertymk 什么点击处理程序? - Max Nanasy
1个回答

0

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

app.before(function (context) {
    if (context.path === lastRoute) return false; // Was fired from our app.setLocation below.
    if (lastRoute === "/#MyHashWhereIFirstWantToConfirm") {
        if (!confirm("Are you sure you wish to leave this page?")) {
            app.setLocation(lastRoute); // Send them back to /#MyHashWhereIFirstWantToConfirm
            return false; // Keep the handler for the destination page from firing.
        }
    }
    lastRoute = context.path;
    return true;
});

结合 window.onbeforeunload ,你可以在没有确认的情况下,基本上防止用户离开页面。


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