【问题标题】:Browser history doubled in angularjs appangularjs 应用程序中的浏览器历史记录翻了一番
【发布时间】:2015-02-27 16:54:11
【问题描述】:

所以我正在使用一个网络应用程序,它有一个指向我的 angularjs 应用程序的 iframe。如果我浏览父 Web 应用程序,我注意到浏览器历史记录翻了一番。例如,如果我导航到contacts > about us > home,那么历史记录将是:

- home
- about us
- about us
- contacts
- contacts

如果我将 iframe 指向一个没有角度的简单网页,那么父应用程序历史记录可以正常工作。我在 angularjs 网站上遇到了这个错误,该错误似乎已在早期版本的 angular 中得到解决:https://github.com/angular/angular.js/issues/1054 但对于某些人来说似乎没有得到解决。我正在使用 v1.2.26。有其他人遇到过这个问题吗?

【问题讨论】:

  • 所以我通过从 iframe 应用程序中删除除基本构建块之外的所有内容(即保留所有 angular 库/依赖项、应用程序控制器/服务/指令等,只删除了ng-view 指令)。因此,浏览器历史记录工作正常。然而,当我重新引入 ng-view 指令时,历史开始翻倍。或许可以做 ngRoute 导航?

标签: angularjs iframe browser-history


【解决方案1】:

所以事实证明,我对路由的假设是正确的,我不敢相信我没有早点意识到这一点。本质上,我的 iframe 应用程序通过某种事件路由到不同的位置。每个路由虽然不会影响父 url,但会在浏览器历史记录中添加一个新条目(这是正常的浏览器行为)。 iframe 应用程序在页面加载时设计为通过几个路由运行,从而添加到浏览器历史记录中,并使其看起来像每个父页面导航都加倍了。

现在的问题变成了,有没有办法防止每次路由执行都添加浏览器历史记录?

更新: $location.replace() 似乎是我能找到的唯一解决方案。该应用程序大量使用$location.path() 来触发新路线;所以我将其修改为 $location.path().replace(); 这将替换当前的历史记录条目,而不是添加一个新条目。

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 2013-01-31
    • 2011-09-29
    • 2014-03-06
    • 2014-07-02
    • 1970-01-01
    • 2015-06-14
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多