我在这里的目标是在一个单页面应用程序中创建一个Javascript函数,它可以告诉我后退按钮是否可以做任何事情。
我认为window.history.length
会对我有所帮助:如果长度与应用程序启动时的长度相同,则您处于“开始”,函数应该什么也不做。
但不是。假设应用程序中有一个内部链接,即#a
。当你从一个新的标签启动应用程序时,浏览器是#
,长度是1,你知道后退按钮不会做任何事情。如果您单击#a
,您将转到#a
,长度为2,您知道back按钮将起作用。
然后,不幸的是,如果您确实按下了back按钮,您将返回到#
,但长度仍然是2,因为#a
是在“未来的历史”中。
帮帮我。如何知道后退按钮当前是否处于“活动”状态?这简直要了我的命。
(这个问题有点复杂,因为历史上可能有一个完全不同的站点的URL。对我来说,这应该被视为“非活动”,即使后退按钮本身可以正常工作。)
发布于 2015-08-08 08:20:14
假设您的用户从不手动修改url,那么他们导航的唯一方式就是
因此,您可以使用自己的历史记录来跟踪这一点。每次点击一个按钮时,存储它所在的页面和被点击的按钮(可能在本地存储中)。然后,当它再次加载时,您可以通过点击按钮/链接或返回来简单地测试是否到达了用户现在所在的位置。如果是通过回击,则减少您的历史记录。如果您没有记录历史记录,您知道后退按钮要么不起作用,要么转到不同的站点。
发布于 2015-08-08 08:20:43
解决方案是将路由更改存储在应用程序中,并保留自己的状态历史记录。这是因为以下原因:
出于安全原因,history对象不允许非特权代码访问会话历史记录中其他页面的URL,但允许它导航会话历史记录。
要在angular中做到这一点,您需要使用$locationChangeSuccess事件。参见:用于检测后退按钮的How to detect browser back button click event using angular?,如果不是后退按钮,只需将其附加到您跟踪的数组中。
https://stackoverflow.com/questions/31888306
复制相似问题