【发布时间】:2017-12-19 12:24:26
【问题描述】:
我想禁用我的应用程序的后退按钮(我知道这是愚蠢的,糟糕的用户体验,对世界不利,甚至是犯罪!)但我的客户希望禁用它的后退按钮:)。无论如何,我为禁用后退按钮做了以下操作。
我在window.onpopstate 事件处理程序中设置了一个标志,如下所示:
window.onpopstate = function() { window.backClicked = true; }
在我的主控制器内部设置如下:
$rootScope.$on('$locationChangeStart', function (event, next, current) {
if (window.backButton) {
event.preventDefault();
window.backButton = false;
}
});
我想知道我的方法不好?
我使用了像这样的其他流行解决方案:
window.onpopstate = function(event) {
history.go(1); // or window.forward()
};
但它在chrome中不起作用,它第一次不起作用并在状态之间循环,并且window.forward()没有重新加载状态,更准确地说:如果我有三个名为A,B的状态, C具有各自的URL/stateA,/stateB和/stateC,并且用户处于状态B,他按下后退按钮突然url变为/stateA并且状态A被加载并且url变为/stateB但状态B未加载,url为/stateB,但加载状态为A。
对后一种方法有什么解决方法或想法吗?
顺便说一句,我在这个问题上苦苦挣扎了三天多。
【问题讨论】:
-
问题是市场上有一些类似的应用程序禁用了返回按钮。它们大多是用 asp.net 网络表单编写的,这在某种程度上更容易禁用后退按钮,更大的问题是在大型企业中,单个开发人员没有那么大的权力。
标签: javascript angularjs routing angular-ui-router html5-history