【问题标题】:Disabling back button in AngularJS with ui-router使用 ui-router 在 AngularJS 中禁用后退按钮
【发布时间】: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


【解决方案1】:

  $rootScope.$on('$locationChangeStart', function (event, next, current) {
                if (window.backButton) {
                    event.preventDefault();
                    window.history.forward();// keep redirecting to the same page
                }
        });

event.preventDefault() 会阻止后退,window.history.forward() 也会保持原样,让我们​​试试吧!!

【讨论】:

  • 我不太相信添加window.history.forward() 有什么额外好处,你能详细说明一下吗?
  • 如您所知,forward() 方法会加载当前历史列表中的下一个 URL。这与在浏览器中单击“转发按钮”相同,就像您知道 history.go(1) 一样。它清楚地表明您将继续前进,因为结果是您将保持在同一页面上。注意:它将支持所有流行的浏览器。
  • 不使用window.history.forward() 我也停留在当前网址,我做错了吗?
猜你喜欢
  • 1970-01-01
  • 2014-04-10
  • 2018-01-20
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
相关资源
最近更新 更多