Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 17142|Atsakyti: 2

[HTML/HTML5] HTML neatnaujinamas, kad būtų pakeistas URL adresas

[Kopijuoti nuorodą]
Paskelbta 2017-09-12 13:55:04 | | | |

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:







Ankstesnis:"Baidu Maps" gauna vietovės koordinačių taškus
Kitą:"Huawei" inžinieriai per klaidą ištrynė vartotojo duomenis, todėl 800 000 mobiliųjų telefonų "Guangxi Mobile" negalėjo skambinti
Paskelbta 2017-10-27 09:51:10 |
Tai gana detalus, neblogas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com