Pristatyta nuo Gecko2 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)
HTML5 pristato du metodus, histtory.pushState() ir history.replaceState(), kurie leidžia pridėti ir modifikuoti istorijos objektus. Tuo pačiu metu šie metodai veikia su įvykiu window.onpostate.
Modifikuokite persiuntėją naudodami history.pushState() metodą, kurį galima naudoti http antraštėje, sukurtoje xmlhttpRequest objektui po būsenos modifikavimo. Šis persiuntėjas bus dokumento URL, kai buvo sukurtas XMLHttpRequest.
pushState naudojamas dabartinio puslapio įrašui pridėti prie istorijos, o replaceState ir pushState naudojami lygiai taip pat, skirtumas tik tas, kad jis naudojamas dabartinio puslapio įrašui istorijoje modifikuoti.
pavyzdys Tarkime http://mozilla.org/foo.html puslapis vykdo JS
var stateObj = { foo: "bar" }; history.pushState(stateObj, "2 puslapis", "bar.html"); Šis metodas padarys URL adreso juostos rodymą http://mozilla.org/bar.html,Tačiau naršyklė neįkels bar.html puslapio, net jei jis egzistuoja。
Dabar vėl tarkime, kad vartotojas ir toliau pasiekia http://google.com ir spustelėja atgal. Šiuo metu URL adreso juostoje http://mozilla.org/bar.html puslapis gaus popstate įvykį (chrome), kuriame bus stateObj kopija. Šis puslapis atrodo kaip foo.html. +
Šiuo metu dar kartą spustelėjame atgal ir URL pasisuks http://mozilla.org/foo.html,document gaus kitą popstate įvykį ir nulinės būsenos objektą. Šis grąžinimo veiksmas nekeičia dokumento turinio. (Gal po kurio laiko jis bandys įkelti...) chromas)
pushState metodas pushState() turi tris parametrus: būsenos objektas, pavadinimas (dabar ignoruojamas, neapdorotas), URL (pasirinktinai). Specifika:
· būsenos objektas – būsenos objektas yra Javascrip{filter}t objektas, susijęs su nauju istorijos objektu, sukurtu naudojant pushState() metodą. Naudojamas informacijai apie įrašus, kuriuos norite įterpti į retrospektyvą, saugoti. Būsenos objektas gali būti bet kokia Json eilutė. Kadangi "Firefox" naudoja vartotojo standųjį diską, kad pasiektų būsenos objektą, maksimali šio objekto saugyklos vieta yra 640 tūkst. Jei ji didesnė už šią reikšmę, metodas pushState() pateikia išimtį. Jei reikia daugiau vietos saugojimui, naudokite vietinę saugyklą.
· title—Firefox ignoruoja šį parametrą dabar, nors jis gali būti naudojamas ateityje. Saugiausias būdas jį naudoti dabar yra perduoti tuščią eilutę, kad ateityje būtų išvengta pakeitimų. Arba galite perduoti trumpą pavadinimą, nurodantį valstiją
· URL – šis parametras naudojamas naujo retrospektyvos objekto URL perdavimui, atminkite, kad naršyklė neįkels šio URL iškvietus pushState() metodą. Bet galbūt po kurio laiko jis bandys įkelti šį URL. Pavyzdžiui, vartotojui iš naujo paleidus naršyklę, naujas URL gali būti ne absoliutus kelias. Jei tai santykinis kelias, jis bus susijęs su esamu URL. Naujas URL turi būti bendras domenas su esamu URL, kitaip pushState() pateiks išimtį. Šis parametras yra neprivalomas, o jei tuščias, jis bus pateiktas kaip dabartinis dokumento URL.
Tam tikra prasme, pushState() metodo iškvietimas yra panašus į window.locatio{filter}n = "#foo" nustatymą, kurie abu sukuria ir suaktyvina kitą istorijos objektą, susietą su dabartiniu dokumentu, tačiau pushState() turi keletą papildomų privalumų:
Naujas URL gali būti bet koks URL, esantis tame pačiame domene kaip ir dabartinis URL, o ne window.locatio{filter}n likti tame pačiame dokumente, jei nustatyta tik maiša.
l Jei nereikia, URL galite palikti nepakeistą. Palyginimui nustatykite window.locatio{filter}n = "#foo"; Generuojami tik nauji retrospektyvos objektai, jei dabartinė maiša nėra #foo
Galite susieti savavališkus duomenis su nauju retrospektyvos objektu. Taikant maišos metodą, visi svarbūs duomenys turi būti užkoduoti į trumpą eilutę.
Atminkite, kad pushState() metodas neužtikrina maišos keitimo laiko, net jei senas ir naujas URL yra tik skirtingos maišos.
replaceState() metodas history.replaceState() naudojamas panašiai kaip pushState(), išskyrus tai, kad replaceState() naudojamas dabartiniam istorijos objektui modifikuoti, o ne kurti naują. Šis metodas kartais gali būti naudingas, kai reikia atnaujinti būsenos objektą arba dabartinės retrospektyvos objektą reaguojant į tam tikrą vartotojo elgseną, ir galite jį naudoti būsenos objekto URL arba dabartinės retrospektyvos objekto URL.
Popstate renginys Pakeitus retrospektyvos objektą, įvyks popbūsenos įvykis. Jei retrospektyvos objektą generuoja metodai pushState ir replaceState, popstate įvykio būsenos atribute bus būsenos objekto kopija iš retrospektyvos objekto
Daugiau informacijos rasite window.onpopstate
Dabartinės būsenos skaitymas Skaityti esamą būseną
Kai puslapis įkeliamas, jame gali būti netuščias būsenos objektas. Taip gali nutikti, kai puslapis nustato būsenos objektą (naudojant pushState arba replaceState) ir vartotojas iš naujo paleidžia naršyklę. Kai puslapis bus įkeltas iš naujo, puslapis gaus įkėlimo įvykį, bet nebus popstate įvykio. Tačiau jei perskaitysite ypatybę history.state, gausite šį būsenos objektą po to, kai įvyks popstate įvykis
History.pushState() dokumentacija: https://developer.mozilla.org/zh-CN/docs/Web/API/History/pushState
Gaunančio URL parametras yra eilutės tipo, kuris naudojamas dabartinės adreso juostos URL pakeisti. Reikia atkreipti dėmesį į tai, kad šis parametras negali būti tas pats, kas kryžminis domenas, tai yra, protokolas, domeno vardas ir prievadas turi būti vienodi.
Neužfiksuota DOMException: nepavyko įvykdyti "pushState" istorijoje: istorijos būsenos objekto su URL "http://www.test.com/" negalima sukurti dokumente, kurio kilmė " https://www.itsvse.com" ir URL "https://www.itsvse.com/". prie <anonymous>:1:9
Teisingas kodas:
|