當只有位置哈希值變化時,有沒有一種方法可以響應JavaScript中的後退按鈕(或按下退格鍵)?也就是說,當瀏覽器不與服務器通信或重新加載頁面時。有沒有辦法在javascript中捕捉後退按鈕事件?
回答
使用hashchange
事件:
window.addEventListener("hashchange", function(e) {
// ...
})
如果您需要支持舊的瀏覽器,檢查出的Modernizr的HTML5跨瀏覽器Polyfills wiki頁面的hashChange
Event section。
onLocationChange
也可能有用。不知道這是否是Mozilla專用的,看起來可能是這樣。
我已經創建了一個solution,這可能對某些人有用。只需在頁面上包含代碼,並且您可以編寫自己的函數,單擊後退按鈕時將調用該函數。
我已經在IE,FF,Chrome和Safari中測試過了,都在工作。在IE和FF中,我使用的基於iframe的解決方案無需進行持續輪詢,但由於其他瀏覽器的侷限性,Safari中使用了位置哈希。
我做了一個有趣的黑客解決這個問題,我滿意。我有一個動態加載內容的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);
所以現在我的部分加載程序通常運行,但如果用戶點擊「返回」或「前進」按鈕時,新位置將被解析並加載相應的部分。
結賬history.js。有一個HTML 5 statechange事件,你可以聽它。
- 1. 如何捕捉後退按鈕事件?
- 2. 後退按鈕事件捕捉「提問」
- 3. 捕捉後退按鈕導航事件
- 4. 無法捕捉Android後退按鈕事件
- 5. 的PhoneGap - Android的後退按鈕 - 如何捕捉按HOLD事件
- 6. 如何在點擊後退按鈕時捕捉事件?
- 7. 有沒有辦法在Dart中捕捉JavaScript異常?
- 8. 有沒有辦法捕捉剪貼板粘貼事件w jQuery?
- 9. JavaScript後退按鈕事件
- 10. 有沒有辦法在iBook小部件中捕捉「關閉」事件?
- 11. 有沒有辦法在IE10 Metro中捕捉縮小的最大事件?
- 12. 我有沒有辦法在後臺捕獲KEYCODE_BRIGHTNESS_DOWN事件?
- 13. MFC:有沒有辦法沒有On_Bn_Clicked()事件的活動按鈕?
- 14. 有沒有辦法捕捉vuejs中的多個子組件發出的事件?
- 15. 真的沒有辦法捕捉退格字符嗎?
- 16. iPhone:捕獲後退按鈕事件
- 17. eventListener沒有使用Javascript捕捉按鍵事件
- 18. onbeforeunload沒有捕捉到所有事件
- 19. UINavigationController沒有後退按鈕
- 20. ABPersonViewController ...沒有後退按鈕
- 21. 在Swift 2中沒有後退按鈕。
- 22. 有沒有辦法在HTML5中捕捉攝像頭的視頻?
- 23. 有沒有辦法在PHP中捕捉eval致命錯誤?
- 24. 有沒有什麼辦法可以在jQuery中捕捉空間
- 25. 有沒有辦法在Visual Studio中捕捉stderr和stdout?
- 26. 有沒有辦法在GWT中捕獲鍵盤事件?
- 27. History.js中有沒有方法知道按下後退按鈕
- 28. 按下後退按鈕後彈出()屏幕時是否有任何事件需要捕捉?
- 29. asp.net:登錄後有沒有辦法「禁用」瀏覽器的後退按鈕?
- 30. 沒有捕捉FB像事件
很高興看到來自StackOverflow的答案已經在老問題的谷歌命中的頂部。這對我很有幫助,但是在我調用的代碼中存在一些問題,如果它改變了,它不會讓哈希更改行執行。一個好的提示可能是最後一次。 – ironfroggy 2008-11-06 23:45:56
在當前的瀏覽器中,您應該使用onhashchange事件http://msdn.microsoft.com/en-us/library/cc288209(v=vs.85).aspx – EricLaw 2011-08-27 19:27:02
好的改進答案。 – pqsk 2015-02-07 03:18:59