【问题标题】:Go back to first state after window.history.pushState在 window.history.pushState 之后回到第一个状态
【发布时间】:2014-04-20 09:38:05
【问题描述】:
当我在我的页面上打开一个弹出窗口时,我使用window.history.pushState 来更改当前URL,效果很好,非常方便。在弹出窗口中,我可以转到其他 URL。问题是当我关闭弹出窗口时,我再次使用第一个 URL 的 pushState,但如果按回,它会再次打开弹出窗口。
我想要的是在关闭弹出窗口后按返回返回到打开弹出窗口之前的上一页。
主页 -> 页面 -> 弹出窗口 1 -> 弹出窗口 2 ->(关闭弹出窗口)页面 ->(按返回)主页(而不是弹出窗口 2)
【问题讨论】:
-
在这篇文章中检查my answer,与您不同的是,它不谈论弹出窗口,但带有弹出标识符的对象文字可以帮助您有条件地检查popstate,如果您按回弹出窗口。
标签:
javascript
url-rewriting
pushstate
【解决方案1】:
我所做的是使用history.go(-x) 而不是pushState(originalURL)。
Home -> (正常导航) Page -> (pushstate) Popup 1 -> (pushstate + 增加popup count) Popup 2 -> (Close popup + go(-2)) Page -> (Press back) Home
编辑
这样做后,我发现大多数浏览器都有历史记录大小的限制(在 chrome 上是 50)。所以我在从弹出窗口 1 移动到 2 时更改为 replaceState。
Home -> (正常导航) Page -> (pushstate) Popup 1 -> (replacestate) Popup 2 -> (Close popup + go(-1)) Page -> (Press back) Home
这也将在按下返回时关闭弹出窗口。