我一直在构建Angular4 / Ionic3应用程序,但遇到了一些与浏览器历史记录和Ionic的历史记录有关的绊脚石。
首先,提供一些背景信息。我的应用程序对所有页面转换都使用navCtrl.SetRoot(),因为.pop()和.push()在刷新浏览器页面时效果不佳。在开发过程中,我记下了Ionic导航的一个怪癖:如果您从Page1转到Page2,然后尝试再次进入Page1(使用.SetRoot(“ Page1”)),Ionic将查看其历史记录并注意到您在Page2之前的Page1处,因此它将决定在浏览器历史记录中向后移动,而不是在历史记录中创建Page1的新实例。在.SetRoot(“ Page1”)操作结束时,历史记录看起来像是'-> Page1 <-Page2',而不是'Page1 Page2-> Page1 <-'。
现在,这通常不是问题,但是我注意到Ionic的内部存储历史记录与浏览器历史记录相分离。因此,如果Ionic的历史记录与浏览器的历史记录不同,则可能会开始出现问题。例如,如果刷新页面,则浏览器历史记录将保持不变,但Ionic的历史记录将成为仅包含当前页面的列表。
E.X。
如果我们从第1页转到第2页再到第3页,请刷新 浏览器历史记录:“第1页第2页->第3页<-” 离子历史记录:'-> Page3 <-'
现在,我们通过按浏览器后退按钮转到第2页 浏览器历史记录:“第1页->第2页<-第3页” 离子历史记录:“ Page3-> Page2 <-” (因为它在历史记录中未在Page3之前找到Page2的实例,因此它会创建一个新实例并将其放在堆栈顶部)
现在,我们设置Root(“ Page3”)。因为Ionic History认为需要返回到Page3,所以它将迫使浏览器History也返回以尝试保持匹配。 浏览器历史记录:“->第1页<-第2页第3页” 离子历史记录:“-> Page3 <-Page2”
结果:由于由于浏览器历史记录现在位于Page1上而导致网址发生了变化,因此额外的不需要的转换将触发,当我们也想转到Page3时,会将我们带到Page1。
请明确说明一下:我所谈论的离子历史是由于我的应用程序的行为而存在的。我从未真正看到过它的存储位置。另外,我确定离子历史与NavCtrl导航堆栈有所不同,因为我的应用程序仅使用.SetRoot(),因此导航堆栈仅是长度为1的数组,仅包含当前页面。
话虽如此,这是我的问题:
是否可以访问和操纵Ionic Framework的内部存储历史记录?至少有办法擦除它吗?
谢谢。