Javascript HTML推送和弹出历史记录
我非常接近我试图实现的目标,但我有两个问题(据我所知):Javascript HTML推送和弹出历史记录,javascript,html,html5-history,Javascript,Html,Html5 History,我非常接近我试图实现的目标,但我有两个问题(据我所知): 如果用户导航到另一个站点(前进或后退按钮),然后返回,则最后一个“状态”不会正确注册到历史记录中,但会正确添加以前的任何“状态” Div层不会显示在Firefox中,除非使用向前或向后导航。单击以显示Div层,您可以看到它是否在一瞬间消失 HTML/JavaScript代码: <html> <head> <title>Test Nav</title> <script
<html>
<head>
<title>Test Nav</title>
<script language="JavaScript">
function clicked(divID) {
document.getElementById('divOne').style.display = 'none';
document.getElementById('divTwo').style.display = 'none';
document.getElementById(divID).style.display = 'block';
data = divID || null;
history.pushState(data,'Test','\Test04.html');
return event.preventDefault();
}
function updateContent(data) {
document.getElementById('divOne').style.display = 'none';
document.getElementById('divTwo').style.display = 'none';
document.getElementById(data).style.display = 'block';
window.alert(data);
}
window.addEventListener('popstate', function(event) {
updateContent(event.state);
});
history.replaceState(data, 'Test','\Test04.html');
</script>
</head>
<body>
<nav>
<ul class="cf">
<li><a href="#DivOne" onclick="clicked('divOne')">Div One</a></li>
<li><a href="#DivTwo" onclick="clicked('divTwo')">Div Two</a></li>
</ul>
</nav>
<div id="divOne" style="display: none">
This is Div One
</div>
<div id="divTwo" style="display: none">
This is Div Two
</div>
</body>
</html>
测试导航
已单击函数(divID){
document.getElementById('divOne').style.display='none';
document.getElementById('divTwo').style.display='none';
document.getElementById(divID).style.display='block';
data=divID | | null;
pushState(数据,'Test','\Test04.html');
return event.preventDefault();
}
函数updateContent(数据){
document.getElementById('divOne').style.display='none';
document.getElementById('divTwo').style.display='none';
document.getElementById(数据).style.display='block';
窗口报警(数据);
}
window.addEventListener('popstate',函数(事件){
updateContent(event.state);
});
replaceState(数据'Test','\Test04.html');
这是第一组
这里是二区
您的意思是,当用户导航到另一个网站,然后返回时,这些状态不再有效?只是离开页面之前显示的最后一个状态/div。如果我在历史记录中返回或前进2+,则会显示正确的状态/div。忘记div,我们在这里讨论的是状态,检查用户返回时是否存在正确的状态,然后我们可以检查div未正确显示状态未定义。这表明在用户单击以加载下一个状态之前,当前状态不会添加到历史记录中。在这个场景中,我点击DivTwo,DivOne被添加到历史记录中(假设DivOne是当前显示的内容)。如果用户随后导航到一个新站点,则需要添加Div Two,但不需要。我的假设是history.pushState会处理这个问题,但这似乎是不正确的。我遗漏了什么?Bump…有没有关于我在这段代码中做错了什么的帮助?更多的测试表明正确的状态存在,但仍然报告它未定义。您可以通过以下方式验证这一点: