3 回答

TA貢獻2021條經(jīng)驗 獲得超8個贊
使用hashchange活動:
window.addEventListener("hashchange", function(e) {
// ...
})
如果您需要支持舊版瀏覽器,請查看Modernizr的HTML5 Cross Browser Polyfills維基頁面中的“ hashChange事件”部分。

TA貢獻1806條經(jīng)驗 獲得超8個贊
我已經(jīng)創(chuàng)建了一個可能對某些人有用的解決方案。只需在頁面上包含代碼,您就可以編寫自己的函數(shù),單擊后退按鈕時將調(diào)用該函數(shù)。
我已經(jīng)在IE,F(xiàn)F,Chrome和Safari中進行了測試,并且都在運行。我已經(jīng)基于iframe工作的解決方案,而不需要在IE和FF中進行常量輪詢,但是,由于其他瀏覽器的限制,位置散列在Safari中使用。

TA貢獻1744條經(jīng)驗 獲得超4個贊
我做了一個有趣的黑客來解決這個問題讓我滿意。我有一個動態(tài)加載內(nèi)容的AJAX站點,然后修改window.location.hash,我有代碼在$(document).ready()上運行來解析哈希并加載相應(yīng)的部分。問題是我對我的部分加載導(dǎo)航代碼感到非常滿意,但是想添加一種攔截瀏覽器后退和前進按鈕的方法,這會改變窗口位置,但不會干擾我操作當(dāng)前頁面加載例程window.location,以及以固定間隔輪詢window.location是不可能的。
我最終做的是創(chuàng)建一個對象:
var pageload = {
ignorehashchange: false,
loadUrl: function(){
if (pageload.ignorehashchange == false){
//code to parse window.location.hash and load content
};
}
};
然后,我在我的站點腳本中添加了一行來pageload.loadUrl在hashchange事件上運行該函數(shù),如下所示:
window.addEventListener("hashchange", pageload.loadUrl, false);
然后,任何時候我想修改window.location.hash不觸發(fā)此頁面加載例程,我只需在每window.location.hash =行之前添加以下行:
pageload.ignorehashchange = true;
然后在每個哈希修改行之后的下一行:
setTimeout(function(){pageload.ignorehashchange = false;}, 100);
所以現(xiàn)在我的部分加載例程通常在運行,但是如果用戶點擊“后退”或“前進”按鈕,則會解析新位置并加載相應(yīng)的部分。
添加回答
舉報