【发布时间】:2017-12-28 17:40:45
【问题描述】:
我使用history.pushState,它就像一个魅力,除了一个问题,如果你在 chromium 或 firefox 中点击“返回”,一旦正确操作了 url,url 会改变,但页面不会重新加载。
详细说明:
我们从mysite.tld开始
现在(经过一些用户交互)我们使用history.pushState 并将网址更改为mysite.tld/some/subpage。页面会相应地重新呈现。
现在,如果您点击“返回”,URL 会改变,但页面不会改变! 如果刷新,页面就会刷新。
我的天真(我是一个绝对的 javascript 菜鸟)是这样添加一个 eventListener:
dom.window.addEventListener("popstate",
{
(event: Event) =>
{
dom.window.location.reload()
}
})
但这当然有一些令人不快的副作用(每当 url 发生变化时,它都会重新加载页面。对于画廊或幻灯片等非常不利)
【问题讨论】:
-
为什么要在 popstate 上重新加载页面?推送状态 API 的存在是为了反映 URL 中单页应用程序的变化。您推送的状态有两个影响:URL 可以共享和添加书签,并且在重新访问时 可以 在服务器端呈现(因此 URL 必须包含您的服务器在检索时重新建立内容所需的所有信息)。您写了“如果您点击“返回”,则 url 会更改,但页面不会更改”-您必须侦听该事件并更新页面内容 client side(通常通过通过 AJAX 请求数据并呈现内容)。
-
这就是我想要做的,但是单独听“popstate”似乎太宽泛了。
标签: javascript browser-history scala.js