阻止iframe添加浏览器历史记录

时间:2015-03-05 16:49:13

标签: javascript angularjs iframe browser-history ngroute

我在第三方iframe(即不同的域)中运行了一个angularjs应用。此应用中的所有路由和导航都会在浏览器历史记录中添加条目,但我想禁用此应用。经过大量研究,似乎利用html5历史api是我最好的机会。

此引用使用一种解决方案,该解决方案基本上是在iframe中单击链接,将当前历史状态(history.replaceState())替换为链接目标URL的状态。因此,如果当前网址与目标网址相同,浏览器将不会添加历史记录条目:http://www.webdeveasy.com/back-button-behavior-on-a-page-with-an-iframe/

我试图在角度上下文中实现类似的解决方案,该方案使用ngRoute模块进行所有导航。话虽如此,我认为为$routeChangeStart事件添加处理程序是一种解决方案,但它不起作用:

$rootScope.$on('$routeChangeStart', function(e, cur, pre) {     
    history.replaceState(null, null, $location.absUrl());       
});

在上文中,此事件处理程序似乎在导航发生之前执行。 absUrl是iframe应用中的路径,并且是路由的目标,但浏览器仍在添加条目。有什么想法吗?


修改 所以我找到了部分解决方案。大多数应用使用$location.path(myPath)进行导航。如果我将replace()添加到$location.path(),那么这会告诉浏览器替换历史记录条目而不是添加新条目。

这似乎适用于使用$ location.path()的所有导航,但不适用于用户驱动的导航(即点击链接);我需要为这些场景找到解决方案。

0 个答案:

没有答案