Javascript 历史API,url片段,css:目标,滚动位置
加载包含片段的url时,如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
/help#beer
,浏览器将呈现页面/help
,然后滚动到id为beer
的元素,并使用:target
选择器上的任何css规则设置元素样式
对于单页应用程序,这在第一页加载时工作良好:客户端路由器将根据url呈现正确的内容,浏览器将滚动并设置目标的样式
但是,当通过历史API导航时,它不起作用:使用js路由器导航到/help#beer
,将呈现/help
页面,并使用历史API推送状态/help#beer
。这不会导致浏览器滚动到idbeer
,也不会设置样式
除了在javascript中重新实现浏览器功能外,还有其他解决方案吗
可以指定
window.location.hash
,这会导致浏览器滚动并设置:target
的样式。我可以按下state/help
,呈现页面,然后将window.location.hash
分配给#beer
,然后滚动和样式将正确。但是,我在历史记录中有一个额外的状态,因此“后退”按钮不能按预期工作。是否使用location.replace帮助?如果您对您的解决方案(除了额外的历史记录条目)感到满意,您是否可以替换它?查看示例3:是否使用location.replace帮助?如果您对您的解决方案(除了额外的历史记录条目)感到满意,您是否可以替换它?查看示例3: