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的页面。这样我就可以导航回到我想要的位置而不会弄乱历史。
你可以看看历史api。 https://developer.mozilla.org/en-US/docs/Web/API/History_API您可以使用pushState来放置一个伪造的URL条目。你也可以用伪造的#anchor标签来做到这一点,在页面加载时可能会触发虚假的点击。 – Keith
你可以查看历史API,当然,但请注意,历史API不会做什么*你要;它希望*你*做它想要的东西。这很奇怪和具有挑战性。 – Pointy