1)我正试图通过浏览器后退按钮找到一种方法来显示确认弹出窗口。在这种情况下,卸载事件似乎不会触发。我正在使用angular2。我已经尝试订阅所有导航事件:
this.router.events.pairwise().subscribe((e) => {
if (e[0] instanceof NavigationEnd && e[1] instanceof NavigationStart) {
console.log(e[0].id + " " + e[0].url + ", " + e[1].id + " " + e[1].url);
if (!this.whateverService.canNavigateAway) {
//var b = confirm("You have unsaved changes. Navigate away?");
}
}
});
但我似乎无法取消导航。
2)如果无法取消使用后退按钮导航,则会出现其他问题。如何区分后退和前进,或者返回3页?然后,最好知道在本地浏览器历史记录中导航和导航的页面的位置。我想知道例如,历史记录中总共有7个页面,我们正在从索引5处的页面导航到索引4处的页面。这样,我可以导航回到我想要的位置而不会弄乱历史记录。 / p>
答案 0 :(得分:2)
据我所知,如果没有使用@keith建议的假网址,你无法控制它们。导航按钮存在于我们的完全控制范围之外,因为它们是浏览器本身的一部分而不是网页,因此它们不能在我们的请求中明确停止。这些内置于浏览器中的内容实际上不应该被搞砸,因为您不想导致不可预测的行为。围绕这个事实开发你的应用程序更聪明,而不是试图打击它。
此外,对于所有这些,您不希望侵入浏览器。一旦你开始处理你没有明确创造或被允许访问的事物,你就越过一条线进入假设的土地,这是一个非常危险的地方,因为我来到学习。
如果您正在尝试保留有状态系统,那么可以在用户到用户的基础上管理后端,这根本不是侵入性的,并且可以提供令人愉悦的用户体验,而不会阻碍正常的浏览器操作,
答案 1 :(得分:0)
如果足以在离开前显示未经自定义的提示/提示,则可以执行此操作:
extends
在Chrome中测试过,似乎您无法在显示的警报中设置文本。
编辑:我没有发布消息来源,因为它似乎没有按照他们的描述工作,但这里是MDN documentation和StackOverflow answer。