Ieviests kopš Gecko2 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)
HTML5 ievieš divas metodes, histtory.pushState() un history.replaceState(), kas ļauj pievienot un modificēt vēstures entītijas. Tajā pašā laikā šīs metodes darbojas ar notikumu window.onpostate.
Modificējiet novirzītāju, izmantojot metodi history.pushState(), ko var izmantot http galvenē, kas izveidota objektam xmlhttpRequest pēc stāvokļa modificēšanas. Šis novirzītājs būs dokumenta URL, kad tika izveidots XMLHttpRequest.
pushState tiek izmantots, lai pievienotu pašreizējās lapas ierakstu vēsturei, bet replaceState un pushState tiek izmantoti tieši tāpat, vienīgā atšķirība ir tā, ka to izmanto, lai modificētu pašreizējās lapas ierakstu vēsturē.
piemērs Pieņemsim http://mozilla.org/foo.html lapa izpilda JS
var stateObj = { foo: "bar" }; history.pushState(stateObj, "2. lpp.", "bar.html"); Šī metode padarīs URL adreses joslu http://mozilla.org/bar.html,Taču pārlūkprogramma neielādēs bar.html lapu, pat ja tā pastāv。
Tagad atkal pieņemsim, ka lietotājs turpina piekļūt http://google.com un noklikšķina atpakaļ. Šobrīd URL adreses joslā http://mozilla.org/bar.html lapa iegūs popstate notikumu (chrome), kurā būs stateObj kopija. Šī lapa izskatās kā foo.html. +
Šajā brīdī mēs vēlreiz noklikšķinām atpakaļ, un URL pagriezīsies http://mozilla.org/foo.html,document iegūs citu popstate notikumu un nulles stāvokļa objektu. Šī atgriešanas darbība nemaina dokumenta saturu. (Varbūt pēc kāda laika tas mēģinās ielādēt ...) hroms)
pushState metode pushState() ir trīs parametri: state object, title (tagad ignorēts, unhandled), URL (pēc izvēles). Specifika:
· stāvokļa objekts — stāvokļa objekts ir Javascrip{filter}t objekts, kas attiecas uz jaunu vēstures entītiju, kas izveidota ar pushState() metodi. Izmanto, lai saglabātu informāciju par ierakstiem, kurus vēlaties ievietot vēsturē. Stāvokļa objekts var būt jebkura Json virkne. Tā kā Firefox izmanto lietotāja cieto disku, lai piekļūtu stāvokļa objektam, šī objekta maksimālā atmiņas vieta ir 640k. Ja tā ir lielāka par šo vērtību, metode pushState() rada izņēmumu. Ja jums ir nepieciešams vairāk vietas glabāšanai, izmantojiet lokālo krātuvi.
· title — Firefox ignorē šo parametru tagad, lai gan tas var tikt izmantots nākotnē. Drošākais veids, kā to izmantot tagad, ir nodot tukšu virkni, lai novērstu turpmākas izmaiņas. Vai arī jūs varat nodot īsu nosaukumu, lai norādītu valsti
· URL — šis parametrs tiek izmantots, lai nodotu jaunās vēstures entītijas URL, ņemiet vērā, ka pārlūkprogramma neielādēs šo URL pēc metodes pushState() izsaukšanas. Bet varbūt pēc kāda laika tas mēģinās ielādēt šo URL. Piemēram, pēc tam, kad lietotājs restartē pārlūkprogrammu, jaunais URL var nebūt absolūts ceļš. Ja tas ir relatīvs ceļš, tad tas būs relatīvs ar esošo URL. Jaunajam URL ir jābūt kopdomēnam ar esošo URL, pretējā gadījumā pushState() radīs izņēmumu. Šis parametrs nav obligāts, un, ja tas ir tukšs, tas tiks ievietots kā pašreizējais dokumenta URL.
Savā ziņā pushState() metodes izsaukšana ir līdzīga window.locatio{filter}n = "#foo" iestatīšanai, kas abi izveido un aktivizē citu vēstures entītiju, kas saistīta ar pašreizējo dokumentu, bet pushState() ir dažas papildu priekšrocības:
Jaunais URL var būt jebkurš URL, kas atrodas tajā pašā domēnā kā pašreizējais URL, nevis window.locatio{filter}n, kas paliek tajā pašā dokumentā, ja ir iestatīts tikai jaucējkods.
l Ja tas nav nepieciešams, varat atstāt URL nemainītu. Salīdzinājumam iestatiet window.locatio{filter}n = "#foo"; Tiek ģenerētas tikai jaunas vēstures entītijas, ja jūsu pašreizējais jaucējkods nav #foo
Patvaļīgus datus var saistīt ar jauno vēstures entītiju. Izmantojot uz jaucējkodu balstītu pieeju, visi attiecīgie dati ir jākodē īsā virknē.
Ņemiet vērā, ka pushState() metode nenodrošina hashchange laiku, pat ja vecais un jaunais URL ir tikai atšķirīgi jaucējkodi.
replaceState() metode history.replaceState() tiek izmantots līdzīgi pushState(), izņemot to, ka replaceState() tiek izmantots, lai modificētu pašreizējo vēstures entītiju, nevis izveidotu jaunu. Šī metode dažkārt var būt noderīga, ja nepieciešams atjaunināt stāvokļa objektu vai pašreizējās vēstures entītiju, reaģējot uz noteiktu lietotāja uzvedību, un to var izmantot, lai atjauninātu stāvokļa objekta URL vai pašreizējās vēstures entītiju.
Popstate pasākums Kad vēstures entītija tiek mainīta, notiks popstāvokļa notikums. Ja vēstures entītiju ģenerē pushState un replaceState metodes, popstate notikuma stāvokļa atribūts saturēs stāvokļa objekta kopiju no vēstures entītijas
Sīkāku informāciju skatiet window.onpopstate
Lasīt pašreizējo stāvokli Lasīt esošo stāvokli
Kad lapa tiek ielādēta, tai var būt netukšs stāvokļa objekts. Tas var notikt, ja lapa iestata stāvokļa objektu (izmantojot pushState vai replaceState) un lietotājs restartē pārlūkprogrammu. Kad lapa tiek atkārtoti ielādēta, lapa saņems ielādes notikumu, bet nebūs popstāvokļa notikuma. Tomēr, ja jūs lasāt history.state rekvizītu, jūs saņemsiet šo stāvokļa objektu pēc popstate notikuma
History.pushState() dokumentācija: https://developer.mozilla.org/zh-CN/docs/Web/API/History/pushState
Saņemošā URL parametrs ir virknes tips, kas tiek izmantots, lai mainītu pašreizējās adreses joslas URL. Jāatzīmē, ka šis parametrs nevar būt tāds pats kā starpdomēns, tas ir, protokolam, domēna nosaukumam un portam jābūt vienādam.
Nenoķerts DOMException: neizdevās izpildīt "pushState" vietnē "Vēsture": vēstures stāvokļa objektu ar URL "http://www.test.com/" nevar izveidot dokumentā ar izcelsmi " https://www.itsvse.com" un URL "https://www.itsvse.com/". plkst. <anonymous>1:9
Pareizais kods:
|