2011-07-25 89 views
0

我使用jquery點擊事件設置哈希標記後的URL。網址設置正確,但是當我使用瀏覽器後退按鈕時,它不會將我帶到上一頁。瀏覽器後退按鈕未更新頁面

我的點擊事件之前的URL看起來像這樣:

http://example.com/menu.php?home 

我的單擊事件是這樣的:

$('#visits').click(function() { 
    $('#main').load("visits.php?type=1&view=1", function() { 
     location.href = "#visits"; 
    }); 
    return false; 
}); 

我的URL現在看起來是這樣的:

http://example.com/menu.php?home#visits 

它似乎menu.php不會被瀏覽器後退按鈕調用。

任何想法我失蹤?

回答

1

你可以編寫這樣的事:

 
var _hash = ''; 

function myHashChangeCallback(hash) { 
    // handle hash change 
    // load some page using ajax, etc 
} 

function hashCheck() { 
    var hash = window.location.hash; 
    if (hash != _hash) { 
     _hash = hash; 
     myHashChangeCallback(hash); 
    } 
} 

setInterval(hashCheck, 100); 
+0

這會適用於較舊的IE瀏覽器。我測試了IE 9,它工作得很好。 – Paul

+0

這種方法可能適用於所有瀏覽器,它只是每隔100ms檢查一次url散列值是否有變化,它非常簡單,並且是瀏覽器通用的,並且它不使用像jQuery這樣的庫來工作。 – 2011-07-25 20:00:35

1

使用窗口的onhashchange事件來檢查散列是否更改。當你點擊瀏覽器後面的按鈕時,這個命令就會被調用。

$(window).bind('hashchange',function() { 
    if (location.hash != '#visits') { 
     //Code to revert the changes on the page 
    } 
} 
+0

這個工程中鉻和FF但IE瀏覽器的功能極大的不獲取調用。任何想法爲什麼?謝謝! – Paul

+0

我發現了一個關於你的新問題的stackoverflow的類似問題:[與IE 9 onhashchange](http://stackoverflow.com/questions/4984319/onhashchange-with-ie-9) – Wulf

+0

我注意到的一件事是, Chrome和FF在使用瀏覽器後退按鈕時會刪除哈希標記。與IE瀏覽器的標籤仍然是這樣的:http://localhost/menu.php?首頁# – Paul

1

IE的舊版本不支持hashchange,所以你必須使用setInterval的輪詢幾次第二,檢查它是否改變了作弊。

if($.browser.msie && $.browser.version < 7){ 
    setInterval(function(){ 
     if(window.location.hash != window.lastHash){ 
      hashChangeHandler(); 
      window.lastHash = window.location.hash; 
     } 
    }, 100); 
} 
else{ 
    $(window).bind('hashchange',function() { 
     if (location.hash != '#visits') { 
      hashChangeHandler(); 
     } 
    } 
} 
+0

我實際上並不記得哪些版本的IE支持它,哪些不支持,所以你可能需要做<8。我最終只是使用間隔黑客來保證我的代碼更具可讀性。 –