Angular js-模拟浏览器后退/前进按钮禁用

Posted

技术标签:

【中文标题】Angular js-模拟浏览器后退/前进按钮禁用【英文标题】:Angular js- Simulate browser back/forward button disabling 【发布时间】:2015-02-14 01:17:27 【问题描述】:

我正在开发需要我模拟浏览器后退/前进按钮的应用程序(我已经实现了 2 个按钮)。我可以使用window.history.forward()window.history.back() 来实现这个功能。该功能按需要工作。 但是我有一个问题,当没有更多页面可以进一步浏览时,我需要禁用前进按钮,反之亦然。

我尝试使用以下解决方法,但没有任何效果。

if(!window.history.next)
    $scope.abcService.enableForwardButton = false;

这个if 条件永远不会得到满足,即使我没有任何页面可以进一步浏览。

var index = window.history.length;
if(window.history[index] != window.location)

    $scope.abcService.enableForwardButton = true;

任何输入都会有所帮助。 注意:禁用按钮是应用程序的强制要求

【问题讨论】:

你应该使用$window服务,而不是直接使用window。 转发应该始终被禁用,除非您在单击其他任何内容之前单击了返回。因此,在每个导航上禁用前进,并仅在短 setTimeout 上的后退命令后解锁。 我可以在点击后退按钮时启用前进按钮,但我更关心如何确定它是否是最后一页,然后在没有更多页面可进一步浏览时禁用前进按钮。 如果你使用 angular,获取 $state.current.name 并在 if 块下禁用 if ($state.current.name=='lastPage')toDo() 如果用户从其他网页访问您的网页怎么办?然后他将在 window.history 中有记录,当他单击“后退”按钮时,他会离开您的应用程序。这是一种理想的行为吗? 【参考方案1】:

$location 服务可能对您有用。 https://docs.angularjs.org/api/ng/service/$location#state

另外,我不确定它与 angular 的兼容性如何,但您可能想查看https://github.com/browserstate/history.js/

【讨论】:

【参考方案2】:

我相信这应该适合你。

if(typeof window.history.forward!=='function')
  $scope.abcService.enableForwardButton = false;

当你可以向前导航时 typeof window.history.forward 是'function',当你不能导航时它是'undefined'

【讨论】:

以上是关于Angular js-模拟浏览器后退/前进按钮禁用的主要内容,如果未能解决你的问题,请参考以下文章

如何用jQuery禁用浏览器的前进后退按钮

如何使用javascript禁用后退和前进按钮

js 监控用户点击浏览器“后退”按钮(并禁用),能实用IE和360两种浏览器

为啥 Angular 组件未在浏览器后退/前进导航上加载?

JS禁用浏览器前进后退

javascript怎么禁用浏览器后退按钮