Tutvustatud alates Gecko2 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)
HTML5 tutvustab kahte meetodit: histtory.pushState() ja history.replaceState(), mis võimaldavad lisada ja muuta ajalooüksusi. Samal ajal töötavad need meetodid ka window.onpostate sündmusega.
Muuda viitajat meetodiga history.pushState(), mida saab kasutada xmlhttpRequest objekti http-päises pärast oleku muutmist. See viitaja on dokumendi URL, kui XMLHttpRequest loodi.
pushState'i kasutatakse praeguse lehe kirje lisamiseks ajalukku, samas kui replaceState ja pushState kasutatakse täpselt samamoodi, ainus erinevus on see, et seda kasutatakse praeguse lehe kirje muutmiseks ajaloos.
näide Oletame http://mozilla.org/foo.html leht käivitab JS-i
var stateObj = { foo: "baar" }; history.pushState(stateObj, "lehekülg 2", "bar.html"); See meetod muudab URL-aadressiriba kuvatuks http://mozilla.org/bar.html,Aga brauser ei laadi bar.html lehte, isegi kui see olemas on。
Oletame jälle, et kasutaja jätkab http://google.com ligipääsu ja klõpsab tagasi. Sel hetkel saab URL-aadressiriba http://mozilla.org/bar.html leht popstate sündmuse (chrome), mis sisaldab stateObj koopiat. See leht näeb välja nagu foo.html. +
Sel hetkel klõpsame uuesti ja URL pöördub http://mozilla.org/foo.html,document saab uue popstate sündmuse ja nulloleku objekti. See tagastustoiming ei muuda dokumendi sisu. (Võib-olla proovib see mõne aja pärast laadida...) kroom)
pushState meetod pushState() sisaldab kolme parameetrit: olekuobjekt, pealkiri (nüüd ignoreeritud, käsitlemata), URL (valikuline). Spetsiifikas:
· olekuobjekt – Olekuobjekt on Javascrip{filter}t objekt, mis seostub uue ajalooüksusega, mis on loodud pushState() meetodiga. Kasutatakse info salvestamiseks kirjete kohta, mida soovid ajalukku lisada. Olekuobjekt võib olla ükskõik milline Json-string. Kuna Firefox kasutab kasutaja kõvaketast olekuobjekti ligipääsuks, on selle objekti maksimaalne salvestusruum 640k. Kui see väärtus on suurem, viskab pushState() meetod erandi. Kui vajad rohkem ruumi hoiustamiseks, kasuta kohalikku hoiukohta.
· pealkiri—Firefox ignoreerib seda parameetrit nüüd, kuigi seda võidakse tulevikus kasutada. Kõige turvalisem viis seda praegu kasutada on edastada tühi string, et vältida tulevasi muudatusi. Või võid esitada lühikese omanditunnistuse, mis näitab osariiki
· URL - Seda parameetrit kasutatakse uue ajaloo üksuse URL-i edastamiseks, pane tähele, et brauser ei laadi seda URL-i pärast pushState() meetodi kutsumist. Aga võib-olla proovib see mõne aja pärast seda URL-i laadida. Näiteks pärast brauseri taaskäivitamist ei pruugi uus URL olla absoluutne tee. Kui see on suhteline tee, siis on see suhteline olemasoleva URL-i suhtes. Uus URL peab olema sama domeeni kui olemasoleva URL, vastasel juhul pushState() teeb erandi. See parameeter on valikuline ja kui see on tühi, paigutatakse see dokumendi praeguseks URL-iks.
Mingis mõttes on pushState() meetodi kutsumine sarnane window.locatio{filter}n = "#foo" seadistamisega, mis mõlemad loovad ja aktiveerivad teise ajalooüksuse, mis on seotud praeguse dokumendiga, kuid pushState()-l on mõned täiendavad eelised:
Uus URL võib olla ükskõik milline URL, mis asub samas domeenis kui praegune URL, erinevalt windows.locatio{filter}n, mis jääb samasse dokumenti, kui on seatud ainult räsi.
l Sa võid URL-i muutmata jätta, kui pole vaja. Võrdluseks sea window.locatio{filter}n = "#foo"; Genereeritakse ainult uusi ajalooüksusi, kui praegune räsi pole #foo
Sa saad seostada suvalisi andmeid oma uue ajalooüksusega. Räsipõhise lähenemise puhul tuleb kõik asjakohased andmed kodeerida lühikeseks stringiks.
Pane tähele, et pushState() meetod ei põhjusta räsivahetuse aega, isegi kui vana ja uus URL on lihtsalt erinevad räsid.
replaceState() meetod history.replaceState() kasutatakse palju sarnaselt pushState(), välja arvatud see, et replaceState() kasutatakse praeguse ajaloo üksuse muutmiseks, mitte uue loomiseks. See meetod võib mõnikord olla kasulik, kui on vaja uuendada olekuobjekti või praegust ajaloo üksust teatud kasutajakäitumise tõttu ning seda saab kasutada olekuobjekti või praeguse ajaloo entiteedi URL-i uuendamiseks.
Popstate'i üritus Kui ajaloo üksus muutub, toimub popstate sündmus. Kui ajaloo üksus genereeritakse pushState ja replaceState meetoditega, sisaldab popstate sündmuse olekuatribuut ajalooobjekti koopiat
Vaata täpsemalt window.onpopstate
Loe praegust seisu Loe olemasolevat olekut
Kui leht laaditakse, võib sellel olla mitte-tühi olekuobjekt. See võib juhtuda, kui leht seab olekuobjekti (kasutades pushState'i või replaceState'i) ja kasutaja taaskäivitab brauseri. Kui leht laaditakse uuesti, saab leht laadimissündmuse, kuid popstate sündmust ei toimu. Kui aga loed history.state omadust, saad selle olekuobjekti pärast popstate sündmuse toimumist
History.pushState() dokumentatsioon: https://developer.mozilla.org/zh-CN/docs/Web/API/History/pushState
Vastuvõtva URL-i parameeter on tüüpi string, mida kasutatakse praeguse aadressiriba URL-i muutmiseks. Üks asi, mida tähele panna, on see, et see parameeter ei saa olla sama mis cross-domain, st protokoll, domeeninimi ja port peavad olema samad.
Uncatch DOMException: Ebaõnnestus 'pushState' käivitamine 'History' peal: Ajalooseisundi objekti URL-iga 'http://www.test.com/' ei saa luua dokumendis, mille päritolu ' https://www.itsvse.com' ja URL 'https://www.itsvse.com/'. Juures <anonymous>:1:9
Õige kood:
|