window.history.pushState不在历史记录中

时间:2011-03-22 21:30:19

标签: jquery ajax html5 pushstate

我在尝试使用history.pushstate事件时遇到了一些问题。我进行了设置,以便页面的url成为通过AJAX加载的页面的实际URL,并且运行正常。

我明白它应该自动创建历史记录,加载以前加载的页面。不幸的是,帽子没有发生,当我向后点击时,网址确实会发生变化但页面没有变化。 你能帮助我吗?这是我的简化代码:

    function hijackLinks() {
        $('a').live("click", function (e) {
            e.preventDefault();
            loadPage(e.target.href);    
            direction = $(this).attr('class');        
        });   
    }


    function loadPage(url) {
        if (url === undefined) {
            $('body').load('url', 'header:first,#content,footer', hijackLinks);
        } else {
            $.get(url, function (data) {
                $('body').append(data);
                 window.history.pushState(url, url, url);

                if (direction === "leftnav") {
                   //DO STUFF
                }
                if (direction !== "leftnav") {
                   //DO STUFF
                }

                setTimeout(function () {
                  //DO STUFF
                },1000);
            });
        }
    }
    $(document).ready(function () {
        loadPage(); 

    });

3 个答案:

答案 0 :(得分:13)

想出来:D,好吧。至少它有效:)

我刚刚添加了

    window.addEventListener("popstate", function(e) {
    loadPage(location.pathname);
});

到页面末尾:)

答案 1 :(得分:2)

我有同样的问题,但我修好了。这很容易

代码示例:

window.addEventListener("popstate", function(e) {
    window.location.href = location.href;
});

答案 2 :(得分:1)

是的,Safari iOS在HTML5历史记录API方面存在一些漏洞 - 实际上,所有HTML5浏览器的工作方式都不同,所以功能现在并不是那么标准。

History.js解决了跨浏览器兼容性问题,并且如果您愿意,还提供可选的HTML4哈希回退。  您还可以参考“兼容性说明”部分,了解它修复的所有浏览器错误。