2011-11-22 51 views
0

首先我對使用一些jquery插件不感興趣。我只是想知道他們是如何實現它,所以我可以創建一個這樣的腳本。歷史事件 - 哈希(#)類型的URL

在html5歷史記錄中,我們使用window.onpopstate事件來檢測返回/轉發瀏覽器事件。我想要的是創造一些像這樣的,所以我可以使用URL的其他瀏覽器哈希類型不支持HTML 5

是這樣的:

if(history.pushState){ 
    //use html5 history event 
    window.onpopstate = function(event){that.__loadCurrentLink();}; 
}else{ 
    //use the History event for other browser 
    window.historyEvent = function(event){that.__loadCurrentLink();};   
} 

你們可以給一些提示或任何東西,所以我會有想法如何做到這一點。

我只是爲了學習的目的和其他人也想知道如何做到這一點。我希望有一些JavaScript怪物可以帶領我們。

+8

「我只是想知道他們是如何實現它,所以我可以創建一個這樣的劇本。」 - 你有沒有考慮閱讀jQuery插件的來源?如果某件事情沒有意義,那麼在SO上發佈一個關於它的問題? –

回答

3

指定爲hashchange事件窗口的事件處理程序,並使用setInterval舊版本瀏覽器輪詢window.location.hash每100ms等,所以當不支持hashchange,你可以得到幾乎是最新的哈希值。

我也建議編寫你的鏈接,按鈕等來調用檢查鼠標上的散列的函數,以便在點擊改變散列的鏈接時保證幾乎沒有延遲。

Hashchange支持的瀏覽器:caniuse.com

+0

這個想法有效。但這不是一個好主意。因爲setInterval,我改變它會自動導航的網址。即使鏈接無效,它也會自動導航,因此建議不要使用此方法。 –

+0

@LeysamRosario這是所有圖書館都這樣做的,這是唯一合理的方式(可能是唯一的方法)。這取決於你驗證網址並按照你喜歡的方式進行操作。如果URL無效,您可以顯示錯誤,忽略或甚至自動完成該URL。當你改變URL的時候,它不是全部的意思,它會觸發處理程序?沒有辦法限制網址,因爲用戶總是可以手動更改網址。 – zatatatata

0

在IE7中發生「散列更改」時沒有事件觸發,在此問題中有更好的描述。

On - window.location.hash - change?

既然你不感興趣「jQuery的解決方案」,我建議您閱讀IE7最佳答案的頂部。

0

許多舊版瀏覽器本身不支持散列更改事件。我相信jQuery將這種功能抽象爲它們的事件監聽器的方式是通過使用setInterval()來不斷地輪詢哈希變化。