Javascript 如何获取路由历史中与当前URL不同的第一个URL?

Javascript 如何获取路由历史中与当前URL不同的第一个URL?,javascript,angularjs,angular-routing,Javascript,Angularjs,Angular Routing,我正在使用应用程序上的一个按钮重定向到上一页 看起来是这样的: <button ng-click="goBack()">Go back</button> 我希望此按钮转到与当前URL不同的上一个URL,而不仅仅是上一页(可能与当前URL相同) 例如: 如果我进入/home,然后进入/products,然后进入/products,然后再次进入/products 然后我想恢复/home 是否有方法获取与当前URL不同的第一个URL?1。 您可以使用window.his

我正在使用应用程序上的一个按钮重定向到上一页

看起来是这样的:

<button ng-click="goBack()">Go back</button>
我希望此按钮转到与当前URL不同的上一个URL,而不仅仅是上一页(可能与当前URL相同)


例如:

  • 如果我进入
    /home
    ,然后进入
    /products
    ,然后进入
    /products
    ,然后再次进入
    /products
  • 然后我想恢复
    /home
是否有方法获取与当前URL不同的第一个URL?1。

您可以使用
window.history.back()使浏览器返回上一页但您无法访问该URL。如果这是可能的,你可以很容易地间谍每一个用户,当他们第一次进入你的网站

但是如果它在同一个域上,您可以使用
document.referer
访问以前的URL

2.

要访问浏览器历史记录,有

您可以通过
窗口访问它。历史记录
,它将返回一组历史记录项。使用该对象,您可以比较当前位置
window.location.href
和以前返回的对象1.

您可以使用
window.history.back()使浏览器返回上一页但您无法访问该URL。如果这是可能的,你可以很容易地间谍每一个用户,当他们第一次进入你的网站

但是如果它在同一个域上,您可以使用
document.referer
访问以前的URL

2.

要访问浏览器历史记录,有


您可以通过
窗口访问它。历史记录
,它将返回一组历史记录项。使用该对象,您可以比较当前位置
window.location.href
和以前返回的对象如果您只想在angular应用程序中进行比较,这并不困难。 例如,您必须使用
stateChangeSuccess
事件监视状态更改,并在状态URL相同时计数。当您想返回上一个不同的URL时,可以使用
window.history.go(-X)
其中
X
是您计算的数字

一个例子(不是完美的,只是一个概念,为了简单起见,一切都在$rootScope上)


如果你只想在angular应用程序中实现这一点,这并不难。 例如,您必须使用
stateChangeSuccess
事件监视状态更改,并在状态URL相同时计数。当您想返回上一个不同的URL时,可以使用
window.history.go(-X)
其中
X
是您计算的数字

一个例子(不是完美的,只是一个概念,为了简单起见,一切都在$rootScope上)


出于安全原因,您将无法访问本机历史URL。但您可以使用angular来保存自己的记录,例如
myHistoryService

app.run(function($rootScope, $location, myHistoryService) {
    $rootScope.$on('$routeChangeStart', function(ev, next) {
        var path = $location.path();
        myHistoryService.push(path);
    });
});
myHistoryService
中,您可以直接推送到数组,或者使用任何您喜欢的逻辑


这假设您只需要在自己的域中使用历史记录。

出于安全原因,您将无法访问本机历史记录URL。但您可以使用angular来保存自己的记录,例如
myHistoryService

app.run(function($rootScope, $location, myHistoryService) {
    $rootScope.$on('$routeChangeStart', function(ev, next) {
        var path = $location.path();
        myHistoryService.push(path);
    });
});
myHistoryService
中,您可以直接推送到数组,或者使用任何您喜欢的逻辑


这假设您只需要在自己的域中使用历史记录。

的可能重复(而不是downvoter)尝试
console.log(window.history)
,并获取
历史记录{length:50,scrollRestoration:“auto”,state:null}
。我怎样才能从这个对象访问以前的URL?它确实存储了历史记录,但是你不能访问我说过的URL,我想这是为了防止间谍活动。您可以对历史对象使用一些方法,如下所述:(不是downvoter)尝试
console.log(window.History)
,并获取
History{length:50,scrollRestoration:“auto”,state:null}
。我怎样才能从这个对象访问以前的URL?它确实存储了历史记录,但是你不能访问我说过的URL,我想这是为了防止间谍活动。您可以在历史对象上使用一些方法,如下所述:我在网上看到了类似的情况,但是
historyService
可能增长非常快,您必须设置一个清理系统。。。它似乎有点复杂,只有一个单一的页面按钮,所以我不会使用这个。无论如何,我投了赞成票,因为我觉得你的答案很有趣。我在网上看到了类似的事情,但是
historyService
可能发展得很快,你必须建立一个清洁系统。。。它似乎有点复杂,只有一个单一的页面按钮,所以我不会使用这个。我还是投了赞成票,因为我觉得你的答案很有趣。我不知道
历史中是否存在
.go()
。我会处理的,谢谢!我不知道
历史中是否存在
.go()
。我会处理的,谢谢!
app.run(function($rootScope, $location, myHistoryService) {
    $rootScope.$on('$routeChangeStart', function(ev, next) {
        var path = $location.path();
        myHistoryService.push(path);
    });
});