摘要:方法接收三個(gè)參數(shù),依次為一個(gè)與指定網(wǎng)址相關(guān)的狀態(tài)對象,事件觸發(fā)時(shí),該對象會(huì)傳入回調(diào)函數(shù)。當(dāng)前頁面的對象,即方法中第一個(gè)參數(shù)的值。
基本概念
history接口允許操作瀏覽器的曾經(jīng)在標(biāo)簽頁或者框架里訪問的會(huì)話歷史記錄。
屬性history.length
history.state
history.scrollRestoration
方法history.back()
history.forward()
history.go()
history.pushState()
history.replaceState()
history更多屬性和方法,請參考MDN鏈接
history.pushState();按指定的名稱和URL將數(shù)據(jù)push進(jìn)會(huì)話歷史棧橋。
history.pushState()方法接收三個(gè)參數(shù),依次為:
state: 一個(gè)與指定網(wǎng)址相關(guān)的狀態(tài)對象,poststate事件觸發(fā)時(shí),該對象會(huì)傳入回調(diào)函數(shù)。如果不需要這個(gè)對象,此處可以填null.
title: 新頁面的標(biāo)題,但是所有瀏覽器目前都會(huì)忽略這個(gè)值,因此這里可以填null.
url: 新的網(wǎng)址,必須與當(dāng)前頁面處在同一個(gè)域。瀏覽器的地址欄將顯示這個(gè)網(wǎng)址。
注意事項(xiàng)參數(shù)中url必須和當(dāng)前頁面處在同一個(gè)域下,否則會(huì)報(bào)錯(cuò)。
例如,我在當(dāng)前index.html中使用該方法,url參數(shù)為"https://www.baidu.com".會(huì)出現(xiàn)下面的報(bào)錯(cuò)信息。
調(diào)用了pushState以后,瀏覽器地址欄會(huì)跟隨者發(fā)生變化,但是頁面并不會(huì)刷新,只是在路由棧里面增加了一條記錄。
隨后點(diǎn)擊瀏覽器前進(jìn)后退箭頭,地址欄會(huì)有變化,頁面不會(huì)刷新。但是如果在當(dāng)前瀏覽器地址欄重新輸入一個(gè)地址,然后又返回就會(huì)刷新一次地址。舉例如下:
當(dāng)前頁面是page1.html,調(diào)用pushState(null, null, "page2.html")方法以后,頁面地址變?yōu)閜age2.html.然而頁面顯示的內(nèi)容依舊是page1.html的內(nèi)容。此時(shí)刪掉瀏覽器地址欄參數(shù),改為"https://www.baidu.com"并回車訪問,去到百度頁面的時(shí)候,然后再點(diǎn)擊瀏覽器返回箭頭,將顯示page2.html頁面內(nèi)容。
當(dāng)然,上面在地址欄重新輸入一個(gè)地址的操作,可以改為任何可以刷新當(dāng)前頁面的操作。比如,window.location.href或者window.location.reload()等等
history.replaceState方法的參數(shù)和pushState()方法一模一樣,區(qū)別是它修改瀏覽歷史中當(dāng)前記錄。
history.state當(dāng)前頁面的state對象,即pushState()方法中第一個(gè)參數(shù)的值。
popstate事件每當(dāng)同一個(gè)文檔的瀏覽歷史出現(xiàn)變化時(shí),就會(huì)觸發(fā)popstate事件。
需要注意的是,僅僅調(diào)用pushState方法或replaceState方法,并不會(huì)觸發(fā)該事件,只有用戶點(diǎn)擊瀏覽器倒退按鈕或前進(jìn)按鈕,或者使用JavaScript調(diào)用back,forward,go方法時(shí)才會(huì)觸發(fā)。
使用的時(shí)候可以為popstate事件指定回調(diào)函數(shù)。
window.addEventListener("popstate", function(event) { console.log("location: " + document.location); console.log("state: " + JSON.stringify(event.state)); });應(yīng)用
我們知道,Ajax可以實(shí)現(xiàn)頁面無刷新操作。但是,也會(huì)造成另外的問題,即無法前進(jìn)與后退。
當(dāng)執(zhí)行Ajax操作的時(shí)候,往瀏覽器history中塞入一個(gè)地址(使用pushState);于是,返回的時(shí)候,通過URL或其他傳參,我們就可以還原到Ajax之前的模樣。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/51801.html
摘要:另外該事件只針對同一個(gè)文檔,如果瀏覽歷史的切換,導(dǎo)致加載不同的文檔,該事件不會(huì)被觸發(fā)使用的時(shí)候,可以為事件指定回調(diào)函數(shù)或者回調(diào)函數(shù)的參數(shù)是一個(gè)事件對象,它的屬性指向和方法為當(dāng)前所提供的狀態(tài)對象即這兩個(gè)方法的第一個(gè)參數(shù)。 一、history window.history(可直接寫成history)指向History對象,它表示當(dāng)前窗口的瀏覽歷史。History對象保存了當(dāng)前窗口訪問過的所...
摘要:通過前端路由可以實(shí)現(xiàn)單頁應(yīng)用本文首先從前端路由的原理出發(fā),詳細(xì)介紹了前端路由原理的變遷。接著從的源碼出發(fā),深入理解是如何實(shí)現(xiàn)前端路由的。執(zhí)行上述的賦值后,頁面的發(fā)生改變。 ??react-router等前端路由的原理大致相同,可以實(shí)現(xiàn)無刷新的條件下切換顯示不同的頁面。路由的本質(zhì)就是頁面的URL發(fā)生改變時(shí),頁面的顯示結(jié)果可以根據(jù)URL的變化而變化,但是頁面不會(huì)刷新。通過前端路由可以實(shí)現(xiàn)...
摘要:前端路由庫的作用是改變地址欄,支持瀏覽器前進(jìn)后退,并同步路由對應(yīng)的視圖,這里以及其依賴的庫說一下路由機(jī)制原文地址前提首先簡單介紹一下前端路由機(jī)制所依賴的事件及對應(yīng)的事件對于支持新增方法的瀏覽器,可以通過設(shè)置來在瀏覽器棧中新增一條記錄設(shè)置時(shí) 前端路由庫的作用是改變地址欄,支持瀏覽器前進(jìn)、后退,并同步路由對應(yīng)的視圖,這里以react-router及其依賴的history庫說一下路由機(jī)制 原...
摘要:另外該事件只針對同一個(gè)文檔,如果瀏覽歷史的切換,導(dǎo)致加載不同的文檔,該事件不會(huì)被觸發(fā)使用的時(shí)候,可以為事件指定回調(diào)函數(shù)或者回調(diào)函數(shù)的參數(shù)是一個(gè)事件對象,它的屬性指向和方法為當(dāng)前所提供的狀態(tài)對象即這兩個(gè)方法的第一個(gè)參數(shù)。 history window.history(可直接寫成history)指向History對象,它表示當(dāng)前窗口的瀏覽歷史。History對象保存了當(dāng)前窗口訪問過的所有頁...
摘要:最近開始移動(dòng)端頁面的時(shí)候,被和坑了一把,于是決定對這兩個(gè)對象進(jìn)行一個(gè)全面的剖析。但出于隱私方面的原因,對象不再允許腳本訪問已經(jīng)訪問過的實(shí)際。唯一保持使用的功能只有和方法。華為執(zhí)行完之后,我們發(fā)現(xiàn)不能回退了,是不是就跟實(shí)現(xiàn)同樣的效果了。 最近開始移動(dòng)端頁面的時(shí)候,被window.location和window.history坑了一把,于是決定對這兩個(gè)對象進(jìn)行一個(gè)全面的剖析。下面進(jìn)行我們的...
閱讀 2470·2023-04-25 21:41
閱讀 1647·2021-09-22 15:17
閱讀 1921·2021-09-22 10:02
閱讀 2433·2021-09-10 11:21
閱讀 2569·2019-08-30 15:53
閱讀 996·2019-08-30 15:44
閱讀 946·2019-08-30 13:46
閱讀 1125·2019-08-29 18:36