2008-09-25 111 views

回答

26

使用hashchange事件:

window.addEventListener("hashchange", function(e) { 
    // ... 
}) 

如果您需要支持舊的瀏覽器,檢查出的Modernizr的HTML5跨瀏覽器Polyfills wiki頁面的hashChange Event section

+0

很高興看到來自StackOverflow的答案已經在老問題的谷歌命中的頂部。這對我很有幫助,但是在我調用的代碼中存在一些問題,如果它改變了,它不會讓哈希更改行執行。一個好的提示可能是最後一次。 – ironfroggy 2008-11-06 23:45:56

+17

在當前的瀏覽器中,您應該使用onhashchange事件http://msdn.microsoft.com/en-us/library/cc288209(v=vs.85).aspx – EricLaw 2011-08-27 19:27:02

+0

好的改進答案。 – pqsk 2015-02-07 03:18:59

1

onLocationChange也可能有用。不知道這是否是Mozilla專用的,看起來可能是這樣。

12

我已經創建了一個solution,這可能對某些人有用。只需在頁面上包含代碼,並且您可以編寫自己的函數,單擊後退按鈕時將調用該函數。

我已經在IE,FF,Chrome和Safari中測試過了,都在工作。在IE和FF中,我使用的基於iframe的解決方案無需進行持續輪詢,但由於其他瀏覽器的侷限性,Safari中使用了位置哈希。

6

我做了一個有趣的黑客解決這個問題,我滿意。我有一個動態加載內容的AJAX站點,然後修改window.location.hash,並且有代碼在$(document).ready()上運行來解析哈希並加載相應的部分。問題是,我對我的部分導航代碼非常滿意,但想要添加一種攔截瀏覽器後退和前進按鈕的方法,這會改變窗口位置,但不會干擾當前頁面加載例程,我在其中操作window.location,並以固定間隔輪詢window.location是不可能的。

我最終什麼事做的是創建一個對象,例如:

var pageload = { 
    ignorehashchange: false, 
    loadUrl: function(){ 
     if (pageload.ignorehashchange == false){ 
      //code to parse window.location.hash and load content 
     }; 
    } 
}; 

然後,我添加了一行到我的網站腳本運行於hashchange事件pageload.loadUrl功能,例如:

window.addEventListener("hashchange", pageload.loadUrl, false); 

然後,如果我想修改window.location.hash而不觸發這個頁面加載例程,我只需在每個window.location.hash =行之前添加以下行:

pageload.ignorehashchange = true; 

,然後每個哈希修改行後以下行:

setTimeout(function(){pageload.ignorehashchange = false;}, 100); 

所以現在我的部分加載程序通常運行,但如果用戶點擊「返回」或「前進」按鈕時,新位置將被解析並加載相應的部分。

相關問題