Javascript 历史API,url片段,css:目标,滚动位置

Javascript 历史API,url片段,css:目标,滚动位置,javascript,css,browser,html5-history,Javascript,Css,Browser,Html5 History,加载包含片段的url时,如/help#beer,浏览器将呈现页面/help,然后滚动到id为beer的元素,并使用:target选择器上的任何css规则设置元素样式 对于单页应用程序,这在第一页加载时工作良好:客户端路由器将根据url呈现正确的内容,浏览器将滚动并设置目标的样式 但是,当通过历史API导航时,它不起作用:使用js路由器导航到/help#beer,将呈现/help页面,并使用历史API推送状态/help#beer。这不会导致浏览器滚动到idbeer,也不会设置样式 除了在javas

加载包含片段的url时,如
/help#beer
,浏览器将呈现页面
/help
,然后滚动到id为
beer
的元素,并使用
:target
选择器上的任何css规则设置元素样式

对于单页应用程序,这在第一页加载时工作良好:客户端路由器将根据url呈现正确的内容,浏览器将滚动并设置目标的样式

但是,当通过历史API导航时,它不起作用:使用js路由器导航到
/help#beer
,将呈现
/help
页面,并使用历史API推送状态
/help#beer
。这不会导致浏览器滚动到id
beer
,也不会设置样式

除了在javascript中重新实现浏览器功能外,还有其他解决方案吗


可以指定
window.location.hash
,这会导致浏览器滚动并设置
:target
的样式。我可以按下state
/help
,呈现页面,然后将
window.location.hash
分配给
#beer
,然后滚动和样式将正确。但是,我在历史记录中有一个额外的状态,因此“后退”按钮不能按预期工作。

是否使用location.replace帮助?如果您对您的解决方案(除了额外的历史记录条目)感到满意,您是否可以替换它?查看示例3:是否使用location.replace帮助?如果您对您的解决方案(除了额外的历史记录条目)感到满意,您是否可以替换它?查看示例3: