因為ajax與瀏覽器的history.back()與forward()不友好,無法前進與後退,其解決辦法就是根據當前URL地址中的查詢內容讓對應的選單執行Ajax載入即可。
本文操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
ajax為什麼不能後退?解決ajax無法後退問題實例
都知道ajax有一個明顯的缺點就是與瀏覽器的history.back()與forward()不友好,不能前進與後退。
實例位址:解決ajax無法後退問題實例
解決方法:
在console裡面印出window.history的實例,可以查看相關物件的原型。
length:length為瀏覽記錄佇列長度,由於這個頁面是新開啟的,佇列中只有目前頁面連結相關信息,其值為1
state:
pushState:就是window.history.pushState();
replaceState:就是window.replaceState();
用法:
window.history.pushState({status: 0} ,'' ,'?data=1');
這裡要注意的是,如果實在本地運行的話,在ie和火狐上都是可以完美運行的,但是現在新版的谷歌會報錯,這是因為谷歌的安全機制問題。如果程式碼放在伺服器上的話應該是沒有這個錯誤的。
所以這裡的解題思路:
#1.每次手動點擊左邊的選單,我將Ajax位址的查詢內容(?後面的)附在demo HTML頁面位址後面,使用history.pushState塞到瀏覽器歷史中。
2.瀏覽器的前進與後退,會觸發window.onpopstate事件,透過綁定popstate事件,就可以根據目前URL位址中的查詢內容讓對應的選單執行Ajax載入,實作Ajax的前進與後退效果。
3.頁面首次載入的時候,如果沒有查詢地址、或查詢地址不匹配,則使用第一個選單的Ajax地址的查詢內容,並使用history.replaceState更改當前的瀏覽器歷史,然後觸發Ajax操作。
推薦學習:《ajax影片教學》
以上是ajax為什麼不能後退的詳細內容。更多資訊請關注PHP中文網其他相關文章!