2011-03-22 162 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; 
});