2011-03-22 161 views
3

我有一个小问题,试验history.pushstate事件。我设置它,以便页面的url将是通过AJAX加载的页面的实际URL,并且工作得很好。window.history.pushState不会回溯历史

我知道它应该自动创建历史记录,加载以前加载的页面。不幸的是,帽子并没有发生,当我点击后退的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(); 

    }); 
+0

您使用的是什么浏览器:这很容易

代码示例? – 2011-03-22 21:43:09

+0

我只瞄准野生动物园:),initialy – cmplieger 2011-03-22 21:50:15

+0

我已经合并了你问这个问题的这个副本。 – 2011-03-23 13:42:45

回答

11

想通了:D,好样的。至少它的工作原理:)

我只是说

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

到页面的结束:)

+0

如果这解决了您的问题,请将其标记为已接受。 – 2011-03-23 13:42:26

+0

我还不能,只有明天:) – cmplieger 2011-03-23 14:32:00

+7

只是一个我发现,同时实施类似的提示。 当处理popstate事件时,不要执行另一个pushstate,而应该使用replacestate,这样您将保存浏览器的后退和前向链。 – Nicolo77 2012-01-05 19:46:57

1

呀iOS的Safari浏览器与HTML5的历史API一个公平的一些错误 - 实际上,所有的HTML5浏览器的工作方式各不相同,所以现在功能并不是真正的标准。

History.js可以解决跨浏览器兼容性问题,并且如果您愿意,还可以提供可选的HTML4散列回退。 有关所修复的所有浏览器错误的信息,也可以参阅“兼容性注意事项”部分。

0

我有同样的问题,但我修好了。

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