Javascript HTML推送和弹出历史记录

Javascript HTML推送和弹出历史记录,javascript,html,html5-history,Javascript,Html,Html5 History,我非常接近我试图实现的目标,但我有两个问题(据我所知): 如果用户导航到另一个站点(前进或后退按钮),然后返回,则最后一个“状态”不会正确注册到历史记录中,但会正确添加以前的任何“状态” Div层不会显示在Firefox中,除非使用向前或向后导航。单击以显示Div层,您可以看到它是否在一瞬间消失 HTML/JavaScript代码: <html> <head> <title>Test Nav</title> <script

我非常接近我试图实现的目标,但我有两个问题(据我所知):

  • 如果用户导航到另一个站点(前进或后退按钮),然后返回,则最后一个“状态”不会正确注册到历史记录中,但会正确添加以前的任何“状态”

  • Div层不会显示在Firefox中,除非使用向前或向后导航。单击以显示Div层,您可以看到它是否在一瞬间消失

  • HTML/JavaScript代码:

    <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…有没有关于我在这段代码中做错了什么的帮助?更多的测试表明正确的状态存在,但仍然报告它未定义。您可以通过以下方式验证这一点: