設置瀏覽器的前進或后退,涉及到history對象的使用。
它包含了用戶在瀏覽器窗口中訪問過的url地址,數以window這個對象下的一部分。
history對象的屬性
length:
返回瀏覽器歷史列表中的url條數,用戶在當前標簽每訪問一個頁面,length就會自動加1。
但是出于隱私原因,無法獲取具體的url的記錄值。state:
與當前網址相關得對象,只能通過pushState和replaceState添加或者修改,也可以用來存儲跟url有關得信息。
瀏覽器的前進和后退
history.back(): 加載history列表中前一個url地址,相當于后退;
history.forward(): 加載history列表中下一個url地址,相當于前進按鈕;
- back()和forward()兩個方法都不用傳參,一次加載(后退/前進)一個url得文檔內容。
與go()方法的區別:
history.go(number|URL)
需要傳遞一個整形得參數number或者是一個url地址。
該參數可以是數字,使用的是要訪問的 URL 在 History 的 URL 列表中的相對位置。(-1上一個頁面,1前進一個頁面)。
number > 0, 前進number頁
number = 0,刷新當前頁
number < 0, 后退number頁
-
使用字符串url參數,go() 方法可加載歷史列表中的某個具體的頁面。
- 字符串必須是局部或完整的URL,該函數會去匹配字符串的第一個URL
forward() 等價于 go(1)
back() 等價于 go(-1)
舉個栗子:
history.go(-1); // 后退一頁
history.go(0); // 刷新當前頁
history.go(1); //前進一夜
history.go(-2); // 后退兩頁
history.pushState(state, title, url)
它可以用來 改變url,并且不刷新頁面。
原理: 她會改變當前頁面的location.href并且修改當前的history.state對象,執行后history.length會增加1。
- state:當前網址相關的對象。
- title:頁面標題,但是所有瀏覽器都忽略它,要改變標題還是要用document.title。
- url:一個與當前頁面同域的網址,location.href會變成此值。
history.replaceState(state, title, url)
它只會修改當history.state和location.href,用法同pushState,但它不會改變history.length。
pushState和replaceState第三個參數不可跨域
,并且不會觸發瀏覽器的popstate事件和onhashchange事件
其他方法達到無刷新
可以通過改變location.href或location.hash來達到無刷新的目的。