在与history.history.pushState结合使用历史记录时,页面不会重新加载

Dan*_*iel 5 javascript browser-history pushstate

当我window.history.pushState在浏览器的历史记录中返回时,我不会自动重新加载具有页面的URL ,例如通过单击"历史记录后退按钮".为什么页面不会自动重新加载?我可以改变这种行为吗?

这里有一小段代码来举例说明这个"问题":

<html>
    <head>
        <title>Location test</title>
        <script>
            function load() {
                var value = window.location.search.substr(1);
                document.getElementById('myInput').value = value;
                document.title = 'Location test - ' + value;
            }
            function set(el) {
                window.history.pushState('', '', window.location.pathname + '?' + el.value);
                document.title = 'Location test - ' + el.value;
            }
        </script>
    </head>
    <body onload="load();">
        <input id="myInput" type="text" onkeyup="set(this);">
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

只需在文本字段中写入内容,浏览器历史记录就会相应更新.单击浏览器的历史记录后退按钮不刷新页面.您必须手动刷新它.

我通过在运行的网站上插入我自己的"后退按钮"来解决这个问题window.history.back(); location.reload();.但是如果普通的浏览器"历史后退按钮"能够做到这一点,我会很高兴.

Cra*_*g.C 7

我认为这可能比我更好地解释这个话题. http://rosspenman.com/pushstate-jquery

popstate是关键

我正在研究一个非常类似的问题.不要认为它很漂亮,但以下片段或其变体可能会有所帮助

    $(window).on("popstate", function(e) {
        if (e.originalEvent.state !== null) {
        location.reload()
        }
    });
Run Code Online (Sandbox Code Playgroud)