2015-04-17 19 views
8

Czy to możliwe, aby uzyskać html ostatniego stanu popchnął do historii stos, coś takiego:Pop ostatni stan z historii

history.pushState(null, null, {html: $('body').html()}); 

Zmiana lokalizacji okno:

window.location = url; 

Teraz z nowa lokalizacja:

window.addEventListener('popstate', function(event) { 
    // back to the last state - event.state.html 
} 
history.back() // That what's firing the popstate event? 
+0

"* Coś takiego *" - tak to nie działa? – Bergi

Odpowiedz

0

Szukałem prośby o przesłanie html ostatniego stanu do historii, ale nie uzyskał zadowalających odpowiedzi. Ale mam dla ciebie pomysł, dlaczego nie próbujesz zapisać html stanu przed przeniesieniem go do historii? Jest to całkiem możliwe przy użyciu strony klienta (ciasteczka) lub zmiennych po stronie serwera (sesji), które można pobrać nawet po przeniesieniu historii do historii.

+0

To powinien być komentarz, a nie odpowiedź. –

+0

Na tym etapie nie wolno mi dodawać komentarzy na tym etapie –

0

Sposób pushState przyjmuje obiekt state jak pierwszy argument dokąd przechodzącej w null:

przykładzie pushState() w

var stateObj = {bla: "bar"} ;

history.pushState (stateObj, "strona 2", "bar.html");

Dla przykładu:

//object goes in first argument 
history.pushState({ html: $('body').html() }, "Title of Page", "Url to update address bar"); 

//On PopState, you have access to event.state 
window.addEventListener('popstate', function(event) { 
    var priorStateObj = event.state; 
    console.log(priorStateObj.html); 
} 

Co dotyczy mnie jest to, że wydają się wtedy chcą potencjalnie document.write() że HTML z powrotem do strony? Jeśli tak, starałbym się tego uniknąć, jak wyjaśniono w tym wątku SO: Why is document.write considered a "bad practice"?

O ile zapisywanie całego HTML ciała, to jest trudne. W Firefoksie na przykład obowiązuje limit 640 kilobitów. Jeśli Twój HTML może potencjalnie przekroczyć tę kwotę (prawdopodobnie), będziesz chciał po prostu zapisać informacje, których możesz użyć do odtworzenia tego, czego potrzebujesz. Spróbuj zapisać Object za pomocą informacji potrzebnych do wypełnienia strony przy użyciu JavaScript/jQuery/etc.

Obiekt stanu może być wszystkim, co można serializować. Ponieważ Firefox zapisuje obiekty stanu na dysku użytkownika, aby można je było przywrócić po odtworzeniu przeglądarki przez użytkownika, narzucamy limit wielkości wynoszący 640 tys. znaków na zserializowanej reprezentacji obiektu stanu. Jeśli przekażesz obiekt stanu, którego przekształcona do postaci szeregowej jest większa niż , to pushState(), metoda wyrzuci wyjątek. Jeśli potrzebujesz więcej miejsca niż to, zachęcamy do korzystania z sessionStorage i/lub localStorage.

Dużo więcej dobrych informacji tutaj:

https://developer.mozilla.org/en-US/docs/Web/API/History_API